
/*
	* LayerSlider
	*
	* (c) 2011-2014 George Krupa, John Gera & Kreatura Media
	*
	* Plugin web:			http://kreaturamedia.com/
	* licenses:				http://codecanyon.net/licenses/
*/



function lsShowNotice(lsobj,issue,ver){

	var el;

	if( typeof lsobj == 'string' ){
		el = jQuery('#'+lsobj);
	}else if( typeof lsobj == 'object' ){
		el = lsobj;
	}

	var errorTitle, errorText;

	switch(issue){
		case 'jquery':
		errorTitle = 'multiple jQuery issue';
		errorText = 'It looks like that another plugin or your theme loads an extra copy of the jQuery library causing problems for LayerSlider to show your sliders. <strong>Please navigate on your WordPress admin area to the main page of LayerSlider and enable the "Put JS includes to body" option within the Troubleshooting & Advanced Settings box.</strong>';
		break;
		case 'oldjquery':
		errorTitle = 'old jQuery issue';
		errorText = 'It looks like you are using an old version ('+ver+') of the jQuery library. LayerSlider requires at least version 1.7.0 or newer. Please update jQuery to 1.10.x or higher. Important: Please do not use the jQuery Updater plugin on WordPress and do not update to 2.x version of jQuery because it is not compatible with older browsers like IE 7 & 8. <a href="http://support.kreaturamedia.com/faq/4/layerslider-for-wordpress/#group-13&entry-60">You can read more about updating jQuery by clicking here.</a>';
		break;
	}

	el.addClass('ls-error');
	el.append('<p class="ls-exclam">!</p>');
	el.append('<p class="ls-error-title">LayerSlider: '+errorTitle+'</p>');
	el.append('<p class="ls-error-text">'+errorText+'</p>');
}

(function($) {

	$.fn.layerSlider = function( options ){

		// IMPROVEMENT v4.1.0 Checking jQuery version
		// IMPROVEMENT v4.1.3 Changed required version from 1.7.2 to 1.7.0

		var reqVer = '1.7.0';
		var curVer = $.fn.jquery;
		var el = $(this);

		var checkVersions = function(v1,v2){

			var v1parts = v1.split('.');
			var v2parts = v2.split('.');

			for (var i = 0; i < v1parts.length; ++i) {

				if (v2parts.length == i) {
					return false;
				}

				if(parseInt(v1parts[i]) == parseInt(v2parts[i])){
					continue;
				}else if (parseInt(v1parts[i]) > parseInt(v2parts[i])){
					return false;
				}else{
					return true;
				}
			}

			if (v1parts.length != v2parts.length) {
				return true;
			}

			return true;
		};

		if( !checkVersions('1.8.0',curVer) ){
			el.addClass('ls-norotate');
		}

		// Initializing if jQuery version is greater than 1.7.0

		if( !checkVersions(reqVer,curVer) ){
			lsShowNotice( el, 'oldjquery', curVer );
		}else{

			if( (typeof(options)).match('object|undefined') ){
				return this.each(function(i){
					new layerSlider(this, options);
				});
			}else{
				if( options === 'data' ){
					var lsData = $(this).data('LayerSlider').g;
					if( lsData ){
						return lsData;
					}

				// NEW FEATURES v5.2.0 option to get userInitData & defaultInitData

				}else if( options === 'userInitData' ){
					var lsInitData = $(this).data('LayerSlider').o;
					if( lsInitData ){
						return lsInitData;
					}
				}else if( options === 'defaultInitData' ){
					var lsInitData = $(this).data('LayerSlider').defaults;
					if( lsInitData ){
						return lsInitData;
					}

				}else{
					return this.each(function(i){

						// Control functions: prev, next, start, stop & change

						var lsData = $(this).data('LayerSlider');
						if( lsData ){
							if( !lsData.g.isAnimating && !lsData.g.isLoading ){
								if( typeof options == 'number' ){
									if( options > 0 && options < lsData.g.layersNum + 1 && options != lsData.g.curLayerIndex ){
										lsData.change(options);
									}
								}else{
									switch(options){
										case 'prev':
											lsData.o.cbPrev(lsData.g);
											lsData.prev('clicked');
											break;
										case 'next':
											lsData.o.cbNext(lsData.g);
											lsData.next('clicked');
											break;
										case 'start':
											if( !lsData.g.autoSlideshow ){
												lsData.o.cbStart(lsData.g);
												lsData.g.originalAutoSlideshow = true;
												lsData.start();
											}
											break;
									}
								}
							}
							// if( options === 'debug' ){
							// 	lsData.d.show();
							// }
							if( options === 'redraw' ){
								lsData.resize();
							}
							if( ( lsData.g.autoSlideshow || ( !lsData.g.autoSlideshow && lsData.g.originalAutoSlideshow ) ) && options == 'stop' ){
								lsData.o.cbStop(lsData.g);
								lsData.g.originalAutoSlideshow = false;
								lsData.g.curLayer.find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').each(function(){

									// Clearing videoTimeouts

									clearTimeout( $(this).data( 'videoTimer') );
								});

								lsData.stop();
							}
							if( options == 'forceStop'){
								lsData.forcestop();
							}
						}
					});
				}
			}
		}
	};

	// LayerSlider methods

	var layerSlider = function(el, options) {

		var ls = this;
		ls.$el = $(el).addClass('ls-container');
		ls.$el.data('LayerSlider', ls);

		ls.load = function(){

			// Setting options (user settings) and global (not modificable) parameters

			ls.defaults = layerSlider.options;
			ls.o = $.extend({},ls.defaults, options);
			ls.g = $.extend({},layerSlider.global);
			ls.lt = $.extend({},layerSlider.layerTransitions );
			ls.st = $.extend({},layerSlider.slideTransitions );

			ls.g.enableCSS3 = $(el).hasClass('ls-norotate') ? false : true;

			// NEW FEATURE v5.2.0 saving original HTML Markup

			ls.g.originalMarkup = $(el).html();

			if( ls.g.ie78 ){
				ls.o.lazyLoad = false;
			}

			// WP parameters

			if( ls.o.autoPauseSlideshow === 'enabled' ){
				ls.o.autoPauseSlideshow = true;
			}
			if( ls.o.autoPauseSlideshow === 'disabled' ){
				ls.o.autoPauseSlideshow = false;
			}

			// If layerslider.transitions.js is loaded...

			if( typeof layerSliderTransitions !== 'undefined' ){
				ls.t = $.extend({},layerSliderTransitions);
			}

			// If custom transitions are loaded...

			if( typeof layerSliderCustomTransitions !== 'undefined' ){
				ls.ct = $.extend({},layerSliderCustomTransitions);
			}

			// NEW IMPROVEMENT v3.6 forbid to call the init code more than once on the same element

			if( !ls.g.initialized ){

				ls.g.initialized = true;

				// Added debug mode v3.5

				// ls.debug();

				if( $('html').find('meta[content*="WordPress"]').length ){
					ls.g.wpVersion = $('html').find('meta[content*="WordPress"]').attr('content').split('WordPress')[1];
				}

				if( $('html').find('script[src*="layerslider"]').length ){
					if( $('html').find('script[src*="layerslider"]').attr('src').indexOf('?') != -1 ){
						ls.g.lswpVersion = $('html').find('script[src*="layerslider"]').attr('src').split('?')[1].split('=')[1];
					}
				}

				// Debug mode controls

				// ls.d.aT('LayerSlider controls');
				// ls.d.aU('<a href="#">prev</a> | <a href="#">next</a> | <a href="#">start</a> | <a href="#">stop</a> | <a href="#">force stop</a>');
				// ls.d.history.find('a').each(function(){
				// 	$(this).click(function(e){
				// 		e.preventDefault();
				// 		$(el).layerSlider($(this).text());
				// 	});
				// });

				// ls.d.aT('LayerSlider version information');
				// ls.d.aU('JS version: <strong>' + ls.g.version + '</strong>');
				// if(ls.g.lswpVersion){
				// 	ls.d.aL('WP version: <strong>' + ls.g.lswpVersion + '</strong>');
				// }
				// if(ls.g.wpVersion){
				// 	ls.d.aL('WordPress version: <strong>' + ls.g.wpVersion + '</strong>');
				// }

				// ls.d.aL('jQuery version: <strong>' + $().jquery + '</strong>');

				// if( $(el).attr('id') ){

				// 	ls.d.aT('LayerSlider container');
				// 	ls.d.aU('#'+$(el).attr('id'));
				// }

				// NEW LOAD METHOD v3.5
				// FIXED v4.0 If the selected skin is already loaded, calling the ls.init() function immediately

				if( !ls.o.skin || ls.o.skin == '' || !ls.o.skinsPath || ls.o.skinsPath == '' ){

					// ls.d.aT('Loading without skin. Possibilities: mistyped skin and / or skinsPath.');

					ls.init();
				}else{

					// ls.d.aT('Trying to load with skin: '+ls.o.skin, true);

					// Applying skin

					$(el).addClass('ls-'+ls.o.skin);

					var skinStyle = ls.o.skinsPath+ls.o.skin+'/skin.css';

					cssContainer = $('head');

					if( !$('head').length ){
						cssContainer = $('body');
					}

					if( $('link[href="'+skinStyle+'"]').length ){

						// ls.d.aU('Skin "'+ls.o.skin+'" is already loaded.');

						curSkin = $('link[href="'+skinStyle+'"]');

						if( !ls.g.loaded ){

							ls.g.loaded = true;

							// IMPROVEMENT v4.5.0 Added delay because of caching bugs

					ls.g.t1 = setTimeout(function(){
								ls.init();
							},150);
						}

					}else{
						if (document.createStyleSheet){
							document.createStyleSheet(skinStyle);
							var curSkin = $('link[href="'+skinStyle+'"]');
						}else{
							var curSkin = $('<link rel="stylesheet" href="'+skinStyle+'" type="text/css" />').appendTo( cssContainer );
						}
					}

					// curSkin.load(); function for most of the browsers.

					curSkin.load(function(){

						if( !ls.g.loaded ){

							// ls.d.aU('curSkin.load(); fired');

							ls.g.loaded = true;

							// IMPROVEMENT v4.5.0 Added delay because of caching bugs

					ls.g.t2 = setTimeout(function(){
								ls.init();
							},150);
						}
					});

					// $(window).load(); function for older webkit ( < v536 ).

					$(window).load(function(){

						if( !ls.g.loaded ){

							// ls.d.aU('$(window).load(); fired');

							ls.g.loaded = true;

							// IMPROVEMENT v4.5.0 Added delay because of caching bugs

					ls.g.t3 = setTimeout(function(){
								ls.init();
							},150);
						}
					});

					// Fallback: if $(window).load(); not fired in 2 secs after $(document).ready(),
					// curSkin.load(); not fired at all or the name of the skin and / or the skinsPath
					// mistyped, we must call the init function manually.

					ls.g.t4 = setTimeout( function(){

						if( !ls.g.loaded ){

							// ls.d.aT('Fallback mode: Neither curSkin.load(); or $(window).load(); were fired');

							ls.g.loaded = true;
							ls.init();
						}
					}, 1000);
				}
			}
		};

		ls.init = function(){

			// NEW FEATURE v5.5.0 Appending the slider element into the element specified in appendTo

			$(el).prependTo( $( ls.o.appendTo ) );

			// IMPROVEMENT v4.0.1 Trying to add special ID to <body> or <html> (required to overwrite WordPresss global styles)

			if( !$('html').attr('id') ){
				$('html').attr('id','ls-global');
			}else if( !$('body').attr('id') ){
				$('body').attr('id','ls-global');
			}

			// NEW FEATURES v5.5.0 Hiding the slider on mobile devices, smaller resolutions
			// or changing it to a static but responsive image

			if( ls.g.isMobile() === true && ls.o.hideOnMobile === true ){
				$(el).addClass('ls-forcehide');
				$(el).closest('.ls-wp-fullwidth-container').addClass('ls-forcehide');
			}

			var showHide = function(){

				if( ls.o.hideOnMobile === true && ls.g.isMobile() === true ){
					$(el).addClass('ls-forcehide');
					$(el).closest('.ls-wp-fullwidth-container').addClass('ls-forcehide');
					ls.o.autoStart = false;
				}else{
					if( $(window).width() < ls.o.hideUnder || $(window).width() > ls.o.hideOver ){
						$(el).addClass('ls-forcehide');
						$(el).closest('.ls-wp-fullwidth-container').addClass('ls-forcehide');
					}else{
						$(el).removeClass('ls-forcehide');
						$(el).closest('.ls-wp-fullwidth-container').removeClass('ls-forcehide');
					}
				}
			};

			$(window).resize( function(){

				showHide();
			});

			showHide();

			// NEW FEATURE v1.7 making the slider responsive

			ls.g.sliderWidth = function(){
				return $(el).width();
			}

			ls.g.sliderHeight = function(){
				return $(el).height();
			}

			// Compatibility mode v5.0.0
			//	.ls-layer 	-> .ls-slide
			//	.ls-s 		-> .ls-l

			$(el).find('.ls-layer').removeClass('ls-layer').addClass('ls-slide');
			$(el).find('.ls-slide > *[class*="ls-s"]').each(function(){
				var oldDistanceNum = $(this).attr('class').split('ls-s')[1].split(' ')[0];
				$(this).removeClass('ls-s'+oldDistanceNum).addClass('ls-l'+oldDistanceNum);
			});


			if( ls.o.firstLayer ){
				ls.o.firstSlide = ls.o.firstLayer;
			}
			if( ls.o.animateFirstLayer === false ){
				ls.o.animateFirstSlide = false;
			}

			// REPLACED FEATURE v2.0 If there is only ONE layer, instead of duplicating it, turning off slideshow and loops, hiding all controls, etc.

			if( $(el).find('.ls-slide').length == 1 ){
				ls.o.autoStart = false;
				ls.o.navPrevNext = false;
				ls.o.navStartStop = false;
				ls.o.navButtons = false;
				ls.o.loops = 0;
				ls.o.forceLoopNum = false;
				ls.o.autoPauseSlideshow	= true;
				ls.o.firstSlide = 1;
				ls.o.thumbnailNavigation = 'disabled';
			}

			// IMPROVEMENT v5.2.0 the original width of a full width slider should be always 100% even if the user forgot to set that value
			// BUGFIX v5.3.0 An additional check required (with the original improvement full-width sliders with "normal" responsiveness couldn't be created)

			if( $(el).parent().hasClass('ls-wp-fullwidth-helper') && ls.o.responsiveUnder !== 0 ){
				$(el)[0].style.width = '100%';
			}

			// NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing
			// NEW FEATURE v3.5 responsiveUnder

			if( ls.o.width ){
				ls.g.sliderOriginalWidthRU = ls.g.sliderOriginalWidth = '' + ls.o.width;
			}else{
				ls.g.sliderOriginalWidthRU = ls.g.sliderOriginalWidth = $(el)[0].style.width;
			}

			if( ls.o.height ){
				ls.g.sliderOriginalHeight = '' + ls.o.height;
			}else{
				ls.g.sliderOriginalHeight = $(el)[0].style.height;
			}

			if( ls.g.sliderOriginalWidth.indexOf('%') == -1 && ls.g.sliderOriginalWidth.indexOf('px') == -1 ){
				ls.g.sliderOriginalWidth += 'px';
			}

			if( ls.g.sliderOriginalHeight.indexOf('%') == -1 && ls.g.sliderOriginalHeight.indexOf('px') == -1 ){
				ls.g.sliderOriginalHeight += 'px';
			}

			if( ls.o.responsive && ls.g.sliderOriginalWidth.indexOf('px') != -1 && ls.g.sliderOriginalHeight.indexOf('px') != -1 ){
				ls.g.responsiveMode = true;
			}else{
				ls.g.responsiveMode = false;
			}

			// NEW FEATURE v5.5.0 We must overwrite some user settings if fullScreen mode is enabled

			if( ls.o.fullScreen === true ){
				ls.o.responsiveUnder = 0;
				ls.g.responsiveMode = true;

				if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){
					ls.g.sliderOriginalWidth = parseInt( ls.g.sliderOriginalWidth) + 'px';
				}

				if( ls.g.sliderOriginalHeight.indexOf('%') != -1 ){
					ls.g.sliderOriginalHeight = parseInt( ls.g.sliderOriginalHeight) + 'px';
				}
			}

			// IMPROVEMENT v3.0 preventing WordPress to wrap your sublayers in <code> or <p> elements

			$(el).find('*[class*="ls-l"], *[class*="ls-bg"]').each(function(){
				if( !$(this).parent().hasClass('ls-slide') ){
					$(this).insertBefore( $(this).parent() );
				}
			});

			$(el).find('.ls-slide').each(function(){
				$(this).children(':not([class*="ls-"])').each(function(){
					$(this).remove();
				});

				var hd = $('<div>').addClass('ls-gpuhack');
				if( $(this).find('.ls-bg').length ){
					hd.insertAfter( $(this).find('.ls-bg').eq('0') );
				}else{
					hd.prependTo( $(this) );
				}
			});

			$(el).find('.ls-slide, *[class*="ls-l"]').each(function(){

				if( $(this).data('ls') || $(this).attr('rel') || $(this).attr('style') ){
					if( $(this).data('ls') ){
						var params = $(this).data('ls').toLowerCase().split(';');
					}else if( $(this).attr('rel') && $(this).attr('rel').indexOf(':') != -1 && $(this).attr('rel').indexOf(';') != -1 ){
						var params = $(this).attr('rel').toLowerCase().split(';');
					}else{
						var params = $(this).attr('style').toLowerCase().split(';');
					}
					for(x=0;x<params.length;x++){
						param = params[x].split(':');

						if( param[0].indexOf('easing') != -1 ){
							param[1] = ls.ieEasing( param[1] );
						}

						var p2 = '';
						if( param[2] ){
							p2 = ':'+$.trim(param[2]);
						}

						if( param[0] != ' ' && param[0] != '' ){
							$(this).data( $.trim(param[0]), $.trim(param[1]) + p2 );
						}
					}
				}

				// NEW FEATURE v5.2.0 Starts the slider only if it is in the viewport

				if( ls.o.startInViewport === true && ls.o.autoStart === true ){

					ls.o.autoStart = false;
					ls.g.originalAutoStart = true;
				}

				// NEW FEATURE v1.7 and v3.0 making the slider responsive - we have to use style.left instead of jQuery's .css('left') function!

				var sl = $(this);

				sl.data( 'originalLeft', sl[0].style.left );
				sl.data( 'originalTop', sl[0].style.top );

				if( $(this).is('a') && $(this).children().length > 0 ){
					sl = $(this).children();
				}

				var _w = sl.width();
				var _h = sl.height();

				if( sl[0].style.width && sl[0].style.width.indexOf('%') != -1 ){
					_w = sl[0].style.width;
				}
				if( sl[0].style.height && sl[0].style.height.indexOf('%') != -1 ){
					_h = sl[0].style.height;
				}

				sl.data( 'originalWidth', _w );
				sl.data( 'originalHeight', _h );

				sl.data( 'originalPaddingLeft', sl.css('padding-left') );
				sl.data( 'originalPaddingRight', sl.css('padding-right') );
				sl.data( 'originalPaddingTop', sl.css('padding-top') );
				sl.data( 'originalPaddingBottom', sl.css('padding-bottom') );

				// iOS fade bug when GPU acceleration is enabled #1

				var _o = typeof parseFloat( sl.css('opacity') ) == 'number'  ? Math.round( parseFloat( sl.css('opacity') ) * 100 ) / 100  : 1;
				$(this).data( 'originalOpacity', _o );

				if( sl.css('border-left-width').indexOf('px') == -1 ){
					sl.data( 'originalBorderLeft', sl[0].style.borderLeftWidth );
				}else{
					sl.data( 'originalBorderLeft', sl.css('border-left-width') );
				}
				if( sl.css('border-right-width').indexOf('px') == -1 ){
					sl.data( 'originalBorderRight', sl[0].style.borderRightWidth );
				}else{
					sl.data( 'originalBorderRight', sl.css('border-right-width') );
				}
				if( sl.css('border-top-width').indexOf('px') == -1 ){
					sl.data( 'originalBorderTop', sl[0].style.borderTopWidth );
				}else{
					sl.data( 'originalBorderTop', sl.css('border-top-width') );
				}
				if( sl.css('border-bottom-width').indexOf('px') == -1 ){
					sl.data( 'originalBorderBottom', sl[0].style.borderBottomWidth );
				}else{
					sl.data( 'originalBorderBottom', sl.css('border-bottom-width') );
				}

				sl.data( 'originalFontSize', sl.css('font-size') );
				sl.data( 'originalLineHeight', sl.css('line-height') );
			});

			// CHANGED FEATURE v3.5 url- / deep linking layers

			if( document.location.hash ){
				for( var dl = 0; dl < $(el).find('.ls-slide').length; dl++ ){
					if( $(el).find('.ls-slide').eq(dl).data('deeplink') == document.location.hash.split('#')[1] ){
						ls.o.firstSlide = dl+1;
					}
				}
			}

			// NEW FEATURE v2.0 linkTo

			$(el).find('*[class*="ls-linkto-"]').each(function(){
				var lClasses = $(this).attr('class').split(' ');
				for( var ll=0; ll<lClasses.length; ll++ ){
					if( lClasses[ll].indexOf('ls-linkto-') != -1 ){
						var linkTo = parseInt( lClasses[ll].split('ls-linkto-')[1] );
						$(this).css({
							cursor: 'pointer'
						}).click(function(e){
							e.preventDefault();
							$(el).layerSlider( linkTo );
						});
					}
				}
			});

			// Setting variables

			ls.g.layersNum = $(el).find('.ls-slide').length;

			// NEW FEATURE v3.5 randomSlideshow

			if( ls.o.randomSlideshow && ls.g.layersNum > 2 ){
				ls.o.firstSlide == 'random';
				ls.o.twoWaySlideshow = false;
			}else{
				ls.o.randomSlideshow = false;
			}

			// NEW FEATURE v3.0 random firstSlide

			if( ls.o.firstSlide == 'random' ){
				ls.o.firstSlide = Math.floor(Math.random() * ls.g.layersNum+1);
			}

			ls.o.fisrtSlide = ls.o.fisrtSlide < ls.g.layersNum + 1 ? ls.o.fisrtSlide : 1;
			ls.o.fisrtSlide = ls.o.fisrtSlide < 1 ? 1 : ls.o.fisrtSlide;

			// NEW FEATURE v2.0 loops

			ls.g.nextLoop = 1;

			if( ls.o.animateFirstSlide ){
				ls.g.nextLoop = 0;
			}

			// NEW FEATURE v2.0 videoPreview
			// IMPROVEMENT v4.6.0 http / https support of embedded videos

			var HTTP = document.location.href.indexOf('file:') === -1 ? '' : 'http:';

			// Youtube videos

			$(el).find('iframe[src*="youtube.com"], iframe[src*="youtu.be"]').each(function(){

				// BUGFIX v4.1.0 Firefox embedded video fix

				$(this).parent().addClass('ls-video-layer');

				if( $(this).parent('[class*="ls-l"]') ){

					var iframe = $(this);
					var http = HTTP;

					// Getting thumbnail

					$.getJSON( http + '//gdata.youtube.com/feeds/api/videos/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '?v=2&alt=json&callback=?', function(data) {

						iframe.data( 'videoDuration', parseInt(data['entry']['media$group']['yt$duration']['seconds']) * 1000 );
					});

					var vpContainer = $('<div>').addClass('ls-vpcontainer').appendTo( $(this).parent() );

//					if( ls.o.lazyLoad ){
//						$('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').data('src',  http + '//img.youtube.com/vi/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '/' + ls.o.youtubePreview );
//					}else{
						$('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').attr('src',  http + '//img.youtube.com/vi/' + $(this).attr('src').split('embed/')[1].split('?')[0] + '/' + ls.o.youtubePreview );
//					}
					$('<div>').appendTo( vpContainer ).addClass('ls-playvideo');

					$(this).parent().css({
						width : $(this).width(),
						height : $(this).height()
					}).click(function(){

						// IMPROVEMENT v5.2.0 if video playing is in progress, video layers with auto play will skip showuntil feature

						if( $(this).data('showuntil') > 0 && $(this).data('showUntilTimer') ){
							clearTimeout( $(this).data('showUntilTimer') );
						}

						ls.g.isAnimating = true;

						if( ls.g.paused ){
							if( ls.o.autoPauseSlideshow != false ){
								ls.g.paused = false;
							}
							ls.g.originalAutoSlideshow = true;
						}else{
							ls.g.originalAutoSlideshow = ls.g.autoSlideshow;
						}

						if( ls.o.autoPauseSlideshow != false ){
							ls.stop();
						}

						ls.g.pausedByVideo = true;

						http = $(this).find('iframe').data('videoSrc').indexOf('http') === -1 ? HTTP : '';

						$(this).find('iframe').attr('src', http + $(this).find('iframe').data('videoSrc') );
						$(this).find('.ls-vpcontainer').delay(ls.g.v.d).fadeOut(ls.g.v.fo, function(){
							if( ls.o.autoPauseSlideshow == 'auto' && ls.g.originalAutoSlideshow == true ){
								var videoTimer = setTimeout(function() {
										ls.start();
								}, iframe.data( 'videoDuration') - ls.g.v.d );
								iframe.data( 'videoTimer', videoTimer );
							}
							ls.g.isAnimating = false;
							if( ls.g.resize == true ){
								ls.makeResponsive( ls.g.curLayer, function(){
									ls.g.resize = false;
								});
							}
						});
					});

					var sep = '&';

					if( $(this).attr('src').indexOf('?') == -1 ){
						sep = '?';
					}

					// BUGFIX v5.1.0 Fixed several issues with embedded videos (mostly under Firefox and IE)
					// fixed 'only audio but no video' bug, fixed 'unclickable video controls' bug, fixed 'hidden slider controls' bug

					var videoFix = '&wmode=opaque&html5=1';

					// BUGFIX v5.1.0 Fixed autoplay parameter

					if( $(this).attr('src').indexOf('autoplay') == -1 ){
						$(this).data( 'videoSrc', $(this).attr('src') + sep + 'autoplay=1' + videoFix );
					}else{
						$(this).data( 'videoSrc', $(this).attr('src').replace('autoplay=0','autoplay=1') + videoFix );
					}

					$(this).data( 'originalWidth', $(this).attr('width') );
					$(this).data( 'originalHeight', $(this).attr('height') );
					$(this).attr('src','');
				}
			});

			// Vimeo videos

			$(el).find('iframe[src*="player.vimeo"]').each(function(){

				// BUGFIX v4.1.0 Firefox embedded video fix

				$(this).parent().addClass('ls-video-layer');

				if( $(this).parent('[class*="ls-l"]') ){

					var iframe = $(this);
					var http = HTTP;

					// Getting thumbnail

					var vpContainer = $('<div>').addClass('ls-vpcontainer').appendTo( $(this).parent() );

					$.getJSON( http + '//vimeo.com/api/v2/video/'+ ( $(this).attr('src').split('video/')[1].split('?')[0] ) +'.json?callback=?', function(data){

//						if( ls.o.lazyLoad ){
//							$('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').data('src', data[0]['thumbnail_large'] );
//						}else{
							$('<img>').appendTo( vpContainer ).addClass('ls-videopreview').attr('alt', 'Play video').attr('src', data[0]['thumbnail_large'] );
//						}
						iframe.data( 'videoDuration', parseInt( data[0]['duration'] ) * 1000 );
						$('<div>').appendTo( vpContainer ).addClass('ls-playvideo');
					});


					$(this).parent().css({
						width : $(this).width(),
						height : $(this).height()
					}).click(function(){

						// IMPROVEMENT v5.2.0 if video playing is in progress, video layers with auto play will skip showuntil feature

						if( $(this).data('showuntil') > 0 && $(this).data('showUntilTimer') ){
							clearTimeout( $(this).data('showUntilTimer') );
						}

						ls.g.isAnimating = true;

						if( ls.g.paused ){
							if( ls.o.autoPauseSlideshow != false ){
								ls.g.paused = false;
							}
							ls.g.originalAutoSlideshow = true;
						}else{
							ls.g.originalAutoSlideshow = ls.g.autoSlideshow;
						}

						if( ls.o.autoPauseSlideshow != false ){
							ls.stop();
						}

						ls.g.pausedByVideo = true;

						http = $(this).find('iframe').data('videoSrc').indexOf('http') === -1 ? HTTP : '';

						$(this).find('iframe').attr('src', http + $(this).find('iframe').data('videoSrc') );
						$(this).find('.ls-vpcontainer').delay(ls.g.v.d).fadeOut(ls.g.v.fo, function(){
							if( ls.o.autoPauseSlideshow == 'auto' && ls.g.originalAutoSlideshow == true ){
								var videoTimer = setTimeout(function() {
										ls.start();
								}, iframe.data( 'videoDuration') - ls.g.v.d );
								iframe.data( 'videoTimer', videoTimer );
							}
							ls.g.isAnimating = false;
							if( ls.g.resize == true ){
								ls.makeResponsive( ls.g.curLayer, function(){
									ls.g.resize = false;
								});
							}
						});
					});

					var sep = '&';

					if( $(this).attr('src').indexOf('?') == -1 ){
						sep = '?';
					}

					// BUGFIX v5.1.0 Fixed several issues with embedded videos (mostly under Firefox and IE)
					// fixed 'only audio but no video' bug, fixed 'unclickable video controls' bug, fixed 'hidden slider controls' bug

					var videoFix = '&wmode=opaque';

					// BUGFIX v5.1.0 Fixed autoplay parameter

					if( $(this).attr('src').indexOf('autoplay') == -1 ){
						$(this).data( 'videoSrc', $(this).attr('src') + sep + 'autoplay=1' + videoFix );
					}else{
						$(this).data( 'videoSrc', $(this).attr('src').replace('autoplay=0','autoplay=1') + videoFix );
					}

					$(this).data( 'originalWidth', $(this).attr('width') );
					$(this).data( 'originalHeight', $(this).attr('height') );
					$(this).attr('src','');
				}
			});

			// NEW FEATURE v5.0.0 HTML5 Video Support

			$(el).find('video, audio').each(function(){

				// BUGFIX v5.1.0 fixed HTML5 video sizing issue (again :)

				var ow = typeof $(this).attr('width') !== 'undefined' ? $(this).attr('width') : '640';
				var oh = typeof $(this).attr('height') !== 'undefined' ? $(this).attr('height') : '' + $(this).height();

				if( ow.indexOf('%') === -1 ){
					ow = parseInt( ow );
				}

				if( oh.indexOf('%') === -1 ){
					oh = parseInt( oh );
				}

				if( ow === '100%' && ( oh === 0 || oh === '0' || oh === '100%' ) ){
					$(this).attr('height', '100%');
					oh = 'auto';
				}

				$(this).parent().addClass('ls-video-layer').css({
					width : ow,
					height : oh
				}).data({
					originalWidth : ow,
					originalHeight : oh
				});

				var curVideo = $(this);

				// BUGFIX v5.3.0 'ended' function removed from 'click' function due to multiply

				$(this).on('ended', function(){
					if( ls.o.autoPauseSlideshow === 'auto' && ls.g.originalAutoSlideshow === true ){
						ls.start();
					}
				});

				$(this).removeAttr('width').removeAttr('height').css({
					width : '100%',
					height : '100%'
				}).click(function(e){

					// BUGFIX v5.3.0 autoplay didn't work in all cases

					if( !ls.g.pausedByVideo ){

						if( this.paused ){
							e.preventDefault();
						}

						this.play();

						ls.g.isAnimating = true;

						if( ls.g.paused ){
							if( ls.o.autoPauseSlideshow !== false ){
								ls.g.paused = false;
							}
							ls.g.originalAutoSlideshow = true;
						}else{
							ls.g.originalAutoSlideshow = ls.g.autoSlideshow;
						}

						if( ls.o.autoPauseSlideshow !== false ){
							ls.stop();
						}

						ls.g.pausedByVideo = true;
						ls.g.isAnimating = false;

						if( ls.g.resize === true ){
							ls.makeResponsive( ls.g.curLayer, function(){
								ls.g.resize = false;
							});
						}
					}
				});
			});

			// NEW FEATURE v1.7 animating first layer

			if( ls.o.animateFirstSlide ){
				ls.o.firstSlide = ls.o.firstSlide - 1 === 0 ? ls.g.layersNum : ls.o.firstSlide-1;
			}

			ls.g.curLayerIndex = ls.o.firstSlide;
			ls.g.curLayer = $(el).find('.ls-slide:eq('+(ls.g.curLayerIndex-1)+')');

			// Moving all layers to .ls-inner container

			$(el).find('.ls-slide').wrapAll('<div class="ls-inner"></div>');

			// NEW FEATURE v4.5.0 Timers

			if( ls.o.showBarTimer ){
				ls.g.barTimer = $('<div>').addClass('ls-bar-timer').appendTo( $(el).find('.ls-inner') );
			}

			if( ls.o.showCircleTimer && !ls.g.ie78 ){
				ls.g.circleTimer = $('<div>').addClass('ls-circle-timer').appendTo( $(el).find('.ls-inner') );
				ls.g.circleTimer.append( $('<div class="ls-ct-left"><div class="ls-ct-rotate"><div class="ls-ct-hider"><div class="ls-ct-half"></div></div></div></div><div class="ls-ct-right"><div class="ls-ct-rotate"><div class="ls-ct-hider"><div class="ls-ct-half"></div></div></div></div><div class="ls-ct-center"></div>') );
			}

			// NEW FEATURE v4.0 Adding loading indicator into the element

			ls.g.li = $('<div>').css({
				zIndex: -1,
				display: 'none'
			}).addClass('ls-loading-container').appendTo( $(el) );

			$('<div>').addClass('ls-loading-indicator').appendTo( ls.g.li );

			// Adding styles

			if( $(el).css('position') == 'static' ){
				$(el).css('position','relative');
			}

			// IMPROVEMENT & BUGFIX v4.6.0 Fixed transparent global background issue under IE7 & IE8

			if( ls.o.globalBGImage ){
				$(el).find('.ls-inner').css({
					backgroundImage : 'url('+ls.o.globalBGImage+')'
				});
			}else{
				$(el).find('.ls-inner').css({
					backgroundColor : ls.o.globalBGColor
				});
			}

			if( ls.o.globalBGColor == 'transparent' && ls.o.globalBGImage == false ){
				$(el).find('.ls-inner').css({
					background : 'none transparent !important'
				});
			}

			// NEW FEATURES v5.0.0 Lazy-load & remove unnecessary width & height attributes from images

			$(el).find('.ls-slide img').each(function(){

				$(this).removeAttr('width').removeAttr('height');

				if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){

					if( typeof $(this).data('src') !== 'string' ){

						$(this).data('src', $(this).attr('src') );
						var src = ls.o.skinsPath+'../css/blank.gif';
						$(this).attr('src',src);
					}
				}else{
					if( typeof $(this).data('src') === 'string' ){

						$(this).attr('src',$(this).data('src'));
						$(this).removeAttr('data-src');
					}
				}

			});

			// NEW FEATURE v5.0.0 Parallax layers by mousemove

			$(el).find('.ls-slide').on('mouseenter',function(e){

				ls.g.parallaxStartX = e.pageX - $(this).parent().offset().left;
				ls.g.parallaxStartY = e.pageY - $(this).parent().offset().top;
			});

			$(el).find('.ls-slide').on('mousemove',function(e){

				var mX0 = $(this).parent().offset().left + ls.g.parallaxStartX;
				var mY0 = $(this).parent().offset().top + ls.g.parallaxStartY;

				var mX = e.pageX - mX0;
				var mY = e.pageY - mY0;

				$(this).find('> *:not(.ls-bg)').each(function(){

					if( typeof $(this).data('parallaxlevel') !== 'undefined' && parseInt( $(this).data('parallaxlevel') ) !== 0 ){
						$(this).css({
							marginLeft : -mX / 100 * parseInt( $(this).data('parallaxlevel') ),
							marginTop : -mY / 100 * parseInt( $(this).data('parallaxlevel') )
						});
					}
				});
			});

			$(el).find('.ls-slide').on('mouseleave',function(){

				$(this).find('> *:not(.ls-bg)').each(function(){

					if( typeof $(this).data('parallaxlevel') !== 'undefined' && parseInt( $(this).data('parallaxlevel') ) !== 0 ){
						TweenLite.to( this, .4, {css:{
							marginLeft : 0,
							marginTop : 0
							}
						});
					}
				});
			});

			// Creating navigation

			if( ls.o.navPrevNext ){

				$('<a class="ls-nav-prev" href="#" />').click(function(e){
					e.preventDefault();
					$(el).layerSlider('prev');
				}).appendTo($(el));

				$('<a class="ls-nav-next" href="#" />').click(function(e){
					e.preventDefault();
					$(el).layerSlider('next');
				}).appendTo($(el));

				if( ls.o.hoverPrevNext ){
					$(el).find('.ls-nav-prev, .ls-nav-next').css({
						display: 'none'
					});

					$(el).hover(
						function(){
 							if( !ls.g.forceHideControls ){
								if( ls.g.ie78 ){
									$(el).find('.ls-nav-prev, .ls-nav-next').css('display','block');
								}else{
									$(el).find('.ls-nav-prev, .ls-nav-next').stop(true,true).fadeIn(300);
								}
							}
						},
						function(){
							if( ls.g.ie78 ){
								$(el).find('.ls-nav-prev, .ls-nav-next').css('display','none');
							}else{
								$(el).find('.ls-nav-prev, .ls-nav-next').stop(true,true).fadeOut(300);
							}
						}
					);
				}
			}

			// Creating bottom navigation

			if( ls.o.navStartStop || ls.o.navButtons ){

				var bottomNav = $('<div class="ls-bottom-nav-wrapper" />').appendTo( $(el) );

				ls.g.bottomWrapper = bottomNav;

				if( ls.o.thumbnailNavigation == 'always' ){
					bottomNav.addClass('ls-above-thumbnails');
				}

				if( ls.o.navButtons && ls.o.thumbnailNavigation != 'always' ){

					$('<span class="ls-bottom-slidebuttons" />').appendTo( $(el).find('.ls-bottom-nav-wrapper') );

					// NEW FEATURE v3.5 thumbnailNavigation ('hover')

					if( ls.o.thumbnailNavigation == 'hover' ){

						var thumbs = $('<div class="ls-thumbnail-hover"><div class="ls-thumbnail-hover-inner"><div class="ls-thumbnail-hover-bg"></div><div class="ls-thumbnail-hover-img"><img></div><span></span></div></div>').appendTo( $(el).find('.ls-bottom-slidebuttons') );
					}

					for(x=1;x<ls.g.layersNum+1;x++){

						var btn = $('<a href="#" />').appendTo( $(el).find('.ls-bottom-slidebuttons') ).click(function(e){
							e.preventDefault();
							$(el).layerSlider( ($(this).index() + 1) );
						});

						// NEW FEATURE v3.5 thumbnailNavigation ('hover')

						if( ls.o.thumbnailNavigation == 'hover' ){

							$(el).find('.ls-thumbnail-hover, .ls-thumbnail-hover-img').css({
								width : ls.o.tnWidth,
								height : ls.o.tnHeight
							});

							var th = $(el).find('.ls-thumbnail-hover');

							var ti = th.find('img').css({
								height : ls.o.tnHeight
							});

							var thi = $(el).find('.ls-thumbnail-hover-inner').css({
								visibility : 'hidden',
								display: 'block'
							});

							btn.hover(
								function(){

									var hoverLayer = $(el).find('.ls-slide').eq( $(this).index() );
									var tnSrc;

									if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){

										if( hoverLayer.find('.ls-tn').length ){
											tnSrc = hoverLayer.find('.ls-tn').data('src');
										}else if( hoverLayer.find('.ls-videopreview').length ){
											tnSrc = hoverLayer.find('.ls-videopreview').attr('src');
										}else if( hoverLayer.find('.ls-bg').length ){
											tnSrc = hoverLayer.find('.ls-bg').data('src');
										}else{
											tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
										}
									}else{

										if( hoverLayer.find('.ls-tn').length ){
											tnSrc = hoverLayer.find('.ls-tn').attr('src');
										}else if( hoverLayer.find('.ls-videopreview').length ){
											tnSrc = hoverLayer.find('.ls-videopreview').attr('src');
										}else if( hoverLayer.find('.ls-bg').length ){
											tnSrc = hoverLayer.find('.ls-bg').attr('src');
										}else{
											tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
										}
									}

									$(el).find('.ls-thumbnail-hover-img').css({
										left: parseInt( th.css('padding-left') ),
										top: parseInt( th.css('padding-top') )
									});

									ti.load(function(){

										if( $(this).width() == 0 ){
											ti.css({
												position: 'relative',
												margin: '0 auto',
												left: 'auto'
											});
										}else{
											ti.css({
												position: 'absolute',
												marginLeft : - $(this).width() / 2,
												left: '50%'
											});
										}
									}).attr( 'src', tnSrc );

									th.css({
										display: 'block'
									}).stop().animate({
										left: $(this).position().left + ( $(this).width() - th.outerWidth() ) / 2
									}, 250 );

									thi.css({
										display : 'none',
										visibility : 'visible'
									}).stop().fadeIn(250);
								},
								function(){
									thi.stop().fadeOut(250, function(){
										th.css({
											visibility : 'hidden',
											display: 'block'
										});
									});
								}
							);
						}
					}

					if( ls.o.thumbnailNavigation == 'hover' ){

						thumbs.appendTo( $(el).find('.ls-bottom-slidebuttons') );
					}

					$(el).find('.ls-bottom-slidebuttons a:eq('+(ls.o.firstSlide-1)+')').addClass('ls-nav-active');
				}

				if( ls.o.navStartStop ){

					var buttonStart = $('<a class="ls-nav-start" href="#" />').click(function(e){
						e.preventDefault();
						$(el).layerSlider('start');
					}).prependTo( $(el).find('.ls-bottom-nav-wrapper') );

					var buttonStop = $('<a class="ls-nav-stop" href="#" />').click(function(e){
						e.preventDefault();
						$(el).layerSlider('stop');
					}).appendTo( $(el).find('.ls-bottom-nav-wrapper') );

				}else if( ls.o.thumbnailNavigation != 'always' ){

					$('<span class="ls-nav-sides ls-nav-sideleft" />').prependTo( $(el).find('.ls-bottom-nav-wrapper') );
					$('<span class="ls-nav-sides ls-nav-sideright" />').appendTo( $(el).find('.ls-bottom-nav-wrapper') );
				}

				if( ls.o.hoverBottomNav && ls.o.thumbnailNavigation != 'always' ){

					bottomNav.css({
						display: 'none'
					});

					$(el).hover(
						function(){
							if( !ls.g.forceHideControls ){
								if( ls.g.ie78 ){
									bottomNav.css('display','block');
								}else{
									bottomNav.stop(true,true).fadeIn(300);
								}
							}
						},
						function(){
							if( ls.g.ie78 ){
								bottomNav.css('display','none');
							}else{
								bottomNav.stop(true,true).fadeOut(300);
							}
						}
					)
				}
			}

			// NEW FEATURE v3x.5 thumbnailNavigation ('always')

			if( ls.o.thumbnailNavigation == 'always' ){

				ls.g.thumbsWrapper = $('<div class="ls-thumbnail-wrapper"></div>').appendTo( $(el) );
				var thumbs = $('<div class="ls-thumbnail"><div class="ls-thumbnail-inner"><div class="ls-thumbnail-slide-container"><div class="ls-thumbnail-slide"></div></div></div></div>').appendTo( ls.g.thumbsWrapper );

				ls.g.thumbnails = $(el).find('.ls-thumbnail-slide-container');

				if( !('ontouchstart' in window) ){
					ls.g.thumbnails.hover(
						function(){
							$(this).addClass('ls-thumbnail-slide-hover');
						},
						function(){
							$(this).removeClass('ls-thumbnail-slide-hover');
							ls.scrollThumb();
						}
					).mousemove(function(e){

						var mL = parseInt(e.pageX - $(this).offset().left ) / $(this).width() * ( $(this).width() - $(this).find('.ls-thumbnail-slide').width() );
						$(this).find('.ls-thumbnail-slide').stop().css({
							marginLeft : mL
						});
					});
				}else{
					ls.g.thumbnails.addClass('ls-touchscroll');
				}

				$(el).find('.ls-slide').each(function(){

					var tempIndex = $(this).index() + 1;
					var tnSrc;

					if( ls.o.imgPreload === true && ls.o.lazyLoad === true ){

						if( $(this).find('.ls-tn').length ){
							tnSrc = $(this).find('.ls-tn').data('src');
						}else if( $(this).find('.ls-videopreview').length ){
							tnSrc = $(this).find('.ls-videopreview').attr('src');
						}else if( $(this).find('.ls-bg').length ){
							tnSrc = $(this).find('.ls-bg').data('src');
						}else{
							tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
						}
					}else{

						if( $(this).find('.ls-tn').length ){
							tnSrc = $(this).find('.ls-tn').attr('src');
						}else if( $(this).find('.ls-videopreview').length ){
							tnSrc = $(this).find('.ls-videopreview').attr('src');
						}else if( $(this).find('.ls-bg').length ){
							tnSrc = $(this).find('.ls-bg').attr('src');
						}else{
							tnSrc = ls.o.skinsPath+ls.o.skin+'/nothumb.png';
						}
					}

					var thumb = $('<a href="#" class="ls-thumb-' + tempIndex + '"><img src="'+tnSrc+'"></a>');
					thumb.appendTo( $(el).find('.ls-thumbnail-slide') );

					if( !('ontouchstart' in window) ){

						thumb.hover(
							function(){
								$(this).children().stop().fadeTo(300,ls.o.tnActiveOpacity/100);
							},
							function(){
								if( !$(this).children().hasClass('ls-thumb-active') ){
									$(this).children().stop().fadeTo(300,ls.o.tnInactiveOpacity/100);
								}
							}
						);
					}

					thumb.click(function(e){
						e.preventDefault();
						$(el).layerSlider( tempIndex );
					});
				});

				if( buttonStart && buttonStop ){
					var lsBottomBelowTN = ls.g.bottomWrapper = $('<div class="ls-bottom-nav-wrapper ls-below-thumbnails"></div>').appendTo( $(el) );
					buttonStart.clone().click(function(e){
						e.preventDefault();
						$(el).layerSlider('start');
					}).appendTo( lsBottomBelowTN );
					buttonStop.clone().click(function(e){
						e.preventDefault();
						$(el).layerSlider('stop');
					}).appendTo( lsBottomBelowTN );
				}

				if( ls.o.hoverBottomNav ){

					ls.g.thumbsWrapper.css('display','none');

					if( lsBottomBelowTN ){
						ls.g.bottomWrapper = lsBottomBelowTN.css('display') == 'block' ? lsBottomBelowTN : $(el).find('.ls-above-thumbnails');
						ls.g.bottomWrapper.css('display','none');
					}

					// BUGFIXES v4.1.3 Added checking of the bottomWrapper variable

					$(el).hover(
						function(){
							$(el).addClass('ls-hover');
							if( !ls.g.forceHideControls ){
								if( ls.g.ie78 ){
									ls.g.thumbsWrapper.css('display','block');
									if( ls.g.bottomWrapper ){
										ls.g.bottomWrapper.css('display','block');
									}
								}else{
									ls.g.thumbsWrapper.stop(true,true).fadeIn(300);
									if( ls.g.bottomWrapper ){
										ls.g.bottomWrapper.stop(true,true).fadeIn(300);
									}
								}
							}
						},
						function(){
							$(el).removeClass('ls-hover');
							if( ls.g.ie78 ){
								ls.g.thumbsWrapper.css('display','none');
								if( ls.g.bottomWrapper ){
									ls.g.bottomWrapper.css('display','none');
								}
							}else{
								ls.g.thumbsWrapper.stop(true,true).fadeOut(300);
								if( ls.g.bottomWrapper ){
									ls.g.bottomWrapper.stop(true,true).fadeOut(300);
								}
							}
						}
					)
				}
			}

			// Adding shadow wrapper

			ls.g.shadow = $('<div class="ls-shadow"></div>').appendTo( $(el) );
			if( ls.g.shadow.css('display') == 'block' && !ls.g.shadow.find('img').length ){
				ls.g.showShadow = function(){
					ls.g.shadow.css({
						display: 'none',
						visibility: 'visible'
					}).fadeIn( 500, function(){
						ls.g.showShadow = false;
					});
				}
				ls.g.shadowImg = $('<img>').attr('src',ls.o.skinsPath+ls.o.skin+'/shadow.png').appendTo( ls.g.shadow );
				ls.g.shadowBtmMod = typeof parseInt( $(el).css('padding-bottom') ) == 'number' ? parseInt( $(el).css('padding-bottom') ) : 0;
			}
			ls.resizeShadow();

			// Adding keyboard navigation if turned on and if number of layers > 1

			if( ls.o.keybNav && $(el).find('.ls-slide').length > 1 ){

				$('body').bind('keydown',function(e){
					if( !ls.g.isAnimating && !ls.g.isLoading ){
						if( e.which == 37 ){
							ls.o.cbPrev(ls.g);
							ls.prev('clicked');
						}else if( e.which == 39 ){
							ls.o.cbNext(ls.g);
							ls.next('clicked');
						}
					}
				});
			}

			// Adding touch-control navigation if number of layers > 1

			if('ontouchstart' in window && $(el).find('.ls-slide').length > 1 && ls.o.touchNav ){

			   $(el).find('.ls-inner').bind('touchstart', function( e ) {
					var t = e.touches ? e.touches : e.originalEvent.touches;
					if( t.length == 1 ){
						ls.g.touchStartX = ls.g.touchEndX = t[0].clientX;
					}
			    });

			   $(el).find('.ls-inner').bind('touchmove', function( e ) {
					var t = e.touches ? e.touches : e.originalEvent.touches;
					if( t.length == 1 ){
						ls.g.touchEndX = t[0].clientX;
					}
					if( Math.abs( ls.g.touchStartX - ls.g.touchEndX ) > 45 ){
						e.preventDefault();
					}
			    });

				$(el).find('.ls-inner').bind('touchend',function( e ){
					if( Math.abs( ls.g.touchStartX - ls.g.touchEndX ) > 45 ){
						if( ls.g.touchStartX - ls.g.touchEndX > 0 ){
							ls.o.cbNext(ls.g);
							$(el).layerSlider('next');
						}else{
							ls.o.cbPrev(ls.g);
							$(el).layerSlider('prev');
						}
					}
				});
			}

			// Feature: pauseOnHover (if number of layers > 1)

			if( ls.o.pauseOnHover == true && $(el).find('.ls-slide').length > 1 ){

				// BUGFIX v1.6 stop was not working because of pause on hover

				$(el).find('.ls-inner').hover(
					function(){

						// Calling cbPause callback function

						ls.o.cbPause(ls.g);
						if( ls.g.autoSlideshow ){
							ls.g.paused = true;
							ls.stop();

							// Stopping the animation of Timers

							if( ls.g.barTimer ){
								ls.g.barTimer.stop();
							}

							if( ls.g.circleTimer ){
								if( ls.g.cttl ){
									ls.g.cttl.pause();
								}
							}
							ls.g.pausedSlideTime = new Date().getTime();
						}
					},
					function(){
						if( ls.g.paused == true ){
							ls.start();
							ls.g.paused = false;
						}
					}
				);
			}

			ls.resizeSlider();

			// NEW FEATURE v1.7 added yourLogo

			if( ls.o.yourLogo ){
				ls.g.yourLogo = $('<img>').addClass('ls-yourlogo').appendTo($(el)).attr('style', ls.o.yourLogoStyle ).css({
					visibility: 'hidden',
					display: 'bock'
				}).load(function(){

					// NEW FEATURE v3.0 added responsive yourLogo

					var logoTimeout = 0;

					if( !ls.g.yourLogo ){
						logoTimeout = 1000;
					}

					setTimeout( function(){

						ls.g.yourLogo.data( 'originalWidth', ls.g.yourLogo.width() );
						ls.g.yourLogo.data( 'originalHeight', ls.g.yourLogo.height() );
						if( ls.g.yourLogo.css('left') != 'auto' ){
							ls.g.yourLogo.data( 'originalLeft', ls.g.yourLogo[0].style.left );
						}
						if( ls.g.yourLogo.css('right') != 'auto' ){
							ls.g.yourLogo.data( 'originalRight', ls.g.yourLogo[0].style.right );
						}
						if( ls.g.yourLogo.css('top') != 'auto' ){
							ls.g.yourLogo.data( 'originalTop', ls.g.yourLogo[0].style.top );
						}
						if( ls.g.yourLogo.css('bottom') != 'auto' ){
							ls.g.yourLogo.data( 'originalBottom', ls.g.yourLogo[0].style.bottom );
						}

						// NEW FEATURES v1.8 added yourLogoLink & yourLogoTarget

						if( ls.o.yourLogoLink != false ){
							$('<a>').appendTo($(el)).attr( 'href', ls.o.yourLogoLink ).attr('target', ls.o.yourLogoTarget ).css({
								textDecoration : 'none',
								outline : 'none'
							}).append( ls.g.yourLogo );
						}

						ls.g.yourLogo.css({
							display: 'none',
							visibility: 'visible'
						});

						ls.resizeYourLogo();

					}, logoTimeout );

				}).attr( 'src', ls.o.yourLogo );
			}

			// NEW FEATURE v1.7 added window resize function for make responsive layout better

			$(window).resize(function(){

				ls.resize();
			});

			// BUGFIX v5.3.0 Responsiveness not worked in some cases while changed orientation on mobile devices

			$(window).on('orientationchange',function(){

				$(window).resize();
			});

			ls.g.showSlider = true;

			// NEW FEATURE v1.7 animating first slide

			if( ls.o.animateFirstSlide == true ){
				if( ls.o.autoStart ){
					ls.g.autoSlideshow = true;
					$(el).find('.ls-nav-start').addClass('ls-nav-start-active');
				}else{
					$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
				}
				ls.next();
			}else if( typeof ls.g.curLayer[0] !== 'undefined' ){
				ls.imgPreload(ls.g.curLayer,function(){
					ls.g.curLayer.fadeIn(ls.o.sliderFadeInDuration, function(){

						ls.g.isLoading = false;

						$(this).addClass('ls-active');

						// NEW FEATURE v2.0 autoPlayVideos

						if( ls.o.autoPlayVideos ){
							$(this).delay( $(this).data('delayin') + 25 ).queue(function(){

								// YouTube & Vimeo videos

								$(this).find('.ls-videopreview').click();

								// HTML5 videos

								$(this).find('video, audio').each(function(){
									if( typeof $(this)[0].currentTime !== 0){
										$(this)[0].currentTime = 0;
									}
									$(this).click();
								});

								$(this).dequeue();
							});
						}

						// NEW FEATURE v3.0 showUntil sublayers

						ls.g.curLayer.find(' > *[class*="ls-l"]').each(function(){

							// Setting showUntilTimers

							var cursub = $(this);

							// IMPROVEMENT v5.2.0 video layers with auto play will skip showuntil feature

							if( ( !cursub.hasClass('ls-video-layer') || ( cursub.hasClass('ls-video-layer') && ls.o.autoPlayVideos === false ) ) && cursub.data('showuntil') > 0 ){

								// IMPROVEMENT v4.5.0 sublayerShowUntil will be called anly if necessary

								cursub.data('showUntilTimer', setTimeout(function(){
									ls.sublayerShowUntil( cursub );
								}, cursub.data('showuntil') ));
							}
						});
					});

					ls.changeThumb(ls.g.curLayerIndex)

					// If autoStart is true

					if( ls.o.autoStart ){
						ls.g.isLoading = false;
						ls.start();
					}else{
						$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
					}
				});
			}

			// NEW FEATURE v1.7 added cbInit function

			ls.o.cbInit($(el));
		};

		ls.resize = function(){

				ls.g.resize = true;

				if( !ls.g.isAnimating ){

					ls.makeResponsive( ls.g.curLayer, function(){
						if( ls.g.ltContainer ){
							ls.g.ltContainer.empty();
						}
						ls.g.resize = false;
					});
					if( ls.g.yourLogo ){
						ls.resizeYourLogo();
					}
				}
		};

		ls.start = function(){

			if( ls.g.autoSlideshow ){
				if( ls.g.prevNext == 'prev' && ls.o.twoWaySlideshow ){
					ls.prev();
				}else{
					ls.next();
				}
			}else{
				ls.g.autoSlideshow = true;
				if( !ls.g.isAnimating && !ls.g.isLoading ){
					ls.timer();
				}
			}

			$(el).find('.ls-nav-start').addClass('ls-nav-start-active');
			$(el).find('.ls-nav-stop').removeClass('ls-nav-stop-active');
		};

		ls.timer = function(){

			if( $(el).find('.ls-active').data('ls') ){
				var sD = ls.st.slideDelay;
			}else{
				var sD = ls.o.slideDelay;
			}

			var delaytime = $(el).find('.ls-active').data('slidedelay') ? parseInt( $(el).find('.ls-active').data('slidedelay') ) : sD;

			// BUGFIX v3.0 delaytime did not work on first layer if animateFirstSlide was set to off
			// BUGFIX v3.5 delaytime did not work on all layers in standalone version after bugfix 3.0 :)

			if( !ls.o.animateFirstSlide && !$(el).find('.ls-active').data('slidedelay') ){
				var tempD = $(el).find('.ls-slide:eq('+(ls.o.firstSlide-1)+')').data('slidedelay');
				delaytime = tempD ? tempD : sD;
			}

			clearTimeout( ls.g.slideTimer );

			// NEW FEATURE v4.5.0 Timers

			if( ls.g.pausedSlideTime ){
				if( !ls.g.startSlideTime ){
					ls.g.startSlideTime = new Date().getTime();
				}
				if( ls.g.startSlideTime > ls.g.pausedSlideTime ){
					ls.g.pausedSlideTime =  new Date().getTime();
				}
				if(! ls.g.curSlideTime ){
					ls.g.curSlideTime = delaytime;
				}
				ls.g.curSlideTime -= (ls.g.pausedSlideTime - ls.g.startSlideTime);
				ls.g.pausedSlideTime = false;
				ls.g.startSlideTime = new Date().getTime();
			}else{
				ls.g.curSlideTime = delaytime;
				ls.g.startSlideTime = new Date().getTime();
			}

			// BUGFIX v4.6.0 fixed Bar Timer animation on the fisrt slide if animateFirstSlide is false

			ls.g.curSlideTime = parseInt( ls.g.curSlideTime );

			ls.g.slideTimer = setTimeout(function(){
				ls.g.startSlideTime = ls.g.pausedSlideTime = ls.g.curSlideTime = false;
				ls.start();
			}, ls.g.curSlideTime );

			// Animating Timers

			if( ls.g.barTimer ){
				ls.g.barTimer.animate({
					width : ls.g.sliderWidth()
				}, ls.g.curSlideTime, 'linear', function(){
					$(this).css({
						width: 0
					});
				});
			}

			if( ls.g.circleTimer ){

				var ct1 = ls.g.circleTimer.find('.ls-ct-right .ls-ct-rotate');
				var ct2 = ls.g.circleTimer.find('.ls-ct-left .ls-ct-rotate');

				if( ls.g.circleTimer.css('display') == 'none' ){

					ct1.css({
						rotate : 0
					});

					ct2.css({
						rotate : 0
					});

					ls.g.circleTimer.fadeIn(350);
				}

				if( !ls.g.cttl ){
					ls.g.cttl = new TimelineLite();
					ls.g.cttl.add( TweenLite.fromTo(ct1[0],delaytime/2000,{
						rotation : 0
					},{
						ease : Linear.easeNone,
						rotation : 180,
						onReverseComplete : function(){
							ls.g.cttl = false;
						}
					}));
					ls.g.cttl.add( TweenLite.fromTo(ct2[0],delaytime/2000,{
						rotation : 0
					},{
						ease : Linear.easeNone,
						rotation : 180
					}));
				}else{
					ls.g.cttl.resume();
				}

			}
		};

		ls.stop = function(){

			// Stopping Timers

			ls.g.pausedSlideTime = new Date().getTime();

			if( ls.g.barTimer ){
				ls.g.barTimer.stop();
			}

			if( ls.g.circleTimer ){
				if( ls.g.cttl ){
					ls.g.cttl.pause();
				}
			}

			if( !ls.g.paused && !ls.g.originalAutoSlideshow ){
				$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
				$(el).find('.ls-nav-start').removeClass('ls-nav-start-active');
			}
			clearTimeout( ls.g.slideTimer );
			ls.g.autoSlideshow = false;
		};

		ls.forcestop = function(){

			clearTimeout( ls.g.slideTimer );
			ls.g.autoSlideshow = false;

			clearTimeout( ls.g.t1 );
			clearTimeout( ls.g.t2 );
			clearTimeout( ls.g.t3 );
			clearTimeout( ls.g.t4 );
			clearTimeout( ls.g.t5 );

			if( ls.g.barTimer ){
				ls.g.barTimer.stop();
			}

			if( ls.g.circleTimer ){
				if( ls.g.cttl ){
					ls.g.cttl.pause();
				}
			}

			$(el).find('*').stop(true,false).dequeue();
			$(el).find('.ls-slide >').each(function(){
				if( $(this).data('tr') ){
					$(this).data('tr').pause();
				}
			});

			if( !ls.g.paused && !ls.g.originalAutoSlideshow ){
				$(el).find('.ls-nav-stop').addClass('ls-nav-stop-active');
				$(el).find('.ls-nav-start').removeClass('ls-nav-start-active');
			}
		};

		ls.restart = function(){

			$(el).find('*').stop();
			clearTimeout( ls.g.slideTimer );
			ls.change(ls.g.curLayerIndex,ls.g.prevNext);
		};

		// Because of an ie7 bug, we have to check & format the strings correctly

		ls.ieEasing = function( e ){

			// BUGFIX v1.6 and v1.8 some type of animations didn't work properly

			if( $.trim(e.toLowerCase()) == 'swing' || $.trim(e.toLowerCase()) == 'linear'){
				return e.toLowerCase();
			}else{
				return e.replace('easeinout','easeInOut').replace('easein','easeIn').replace('easeout','easeOut').replace('quad','Quad').replace('quart','Quart').replace('cubic','Cubic').replace('quint','Quint').replace('sine','Sine').replace('expo','Expo').replace('circ','Circ').replace('elastic','Elastic').replace('back','Back').replace('bounce','Bounce');
			}
		};

		// Calculating prev layer

		ls.prev = function(clicked){

			// NEW FEATURE v2.0 loops

			if( ls.g.curLayerIndex < 2 ){
				ls.g.nextLoop += 1;
			}

			if( ( ls.g.nextLoop > ls.o.loops ) && ( ls.o.loops > 0 ) && !clicked ){
				ls.g.nextLoop = 0;
				ls.stop();
				if( ls.o.forceLoopNum == false ){
					ls.o.loops = 0;
				}
			}else{
				var prev = ls.g.curLayerIndex < 2 ? ls.g.layersNum : ls.g.curLayerIndex - 1;
				ls.g.prevNext = 'prev';
				ls.change(prev,ls.g.prevNext);
			}
		};

		// Calculating next layer

		ls.next = function(clicked){

			// NEW FEATURE v2.0 loops

			if( !ls.o.randomSlideshow ){

				if( !(ls.g.curLayerIndex < ls.g.layersNum) ){
					ls.g.nextLoop += 1;
				}

				if( ( ls.g.nextLoop > ls.o.loops ) && ( ls.o.loops > 0 ) && !clicked ){

					ls.g.nextLoop = 0;
					ls.stop();
					if( ls.o.forceLoopNum == false ){
						ls.o.loops = 0;
					}
				}else{

					var next = ls.g.curLayerIndex < ls.g.layersNum ? ls.g.curLayerIndex + 1 : 1;
					ls.g.prevNext = 'next';
					ls.change(next,ls.g.prevNext);
				}
			}else if( !clicked ){

				// NEW FEATURE v3.5 randomSlideshow

				var next = ls.g.curLayerIndex;

				var calcRand = function(){

					next = Math.floor(Math.random() * ls.g.layersNum) + 1;

					if( next == ls.g.curLayerIndex ){

						calcRand();
					}else{
						ls.g.prevNext = 'next';
						ls.change(next,ls.g.prevNext);
					}
				}

				calcRand();
			}else if( clicked ){

				var next = ls.g.curLayerIndex < ls.g.layersNum ? ls.g.curLayerIndex + 1 : 1;
				ls.g.prevNext = 'next';
				ls.change(next,ls.g.prevNext);
			}

		};

		ls.change = function(num,prevnext){

			// Stopping Timers if needed

			ls.g.startSlideTime = ls.g.pausedSlideTime = ls.g.curSlideTime = false;

			// IMPROVEMENT v4.6.0 Bar Timer animation

			if( ls.g.barTimer ){
				ls.g.barTimer.stop().delay(300).animate({
					width: 0
				},450);
			}
			if( ls.g.circleTimer ){
				ls.g.circleTimer.fadeOut(500);
				if( ls.g.cttl ){
					ls.g.cttl.reverse().duration(.35);
				}
			}

			// NEW FEATURE v2.0 videoPreview & autoPlayVideos

			if( ls.g.pausedByVideo == true ){
				ls.g.pausedByVideo = false;
				ls.g.autoSlideshow = ls.g.originalAutoSlideshow;

				ls.g.curLayer.find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').each(function(){

					$(this).parent().find('.ls-vpcontainer').fadeIn(ls.g.v.fi,function(){
						$(this).parent().find('iframe').attr('src','');
					});
				});

				ls.g.curLayer.find('video, audio').each(function(){

					this.pause();
				});
			}

			$(el).find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').each(function(){

				// Clearing videoTimeouts

				clearTimeout( $(this).data( 'videoTimer') );
			});

			clearTimeout( ls.g.slideTimer );
			ls.g.nextLayerIndex = num;
			ls.g.nextLayer = $(el).find('.ls-slide:eq('+(ls.g.nextLayerIndex-1)+')');

			// BUGFIX v1.6 fixed wrong directions of animations if navigating by slidebuttons

			if( !prevnext ){

				if( ls.g.curLayerIndex < ls.g.nextLayerIndex ){
					ls.g.prevNext = 'next';
				}else{
					ls.g.prevNext = 'prev';
				}
			}

			// Added timeOut to wait for the fade animation of videoPreview image...

			var timeOut = 0;

			if( $(el).find('iframe[src*="youtube.com"], iframe[src*="youtu.be"], iframe[src*="player.vimeo"]').length > 0 ){
				timeOut = ls.g.v.fi;
			}

			if( typeof ls.g.nextLayer[0] !== 'undefined' ){
				ls.imgPreload(ls.g.nextLayer,function(){
					ls.animate();
				});
			}
		};

		// Preloading images

		ls.imgPreload = function(layer,callback){

			ls.g.isLoading = true;

			// Showing slider for the first time

			if( ls.g.showSlider ){
				$(el).css({
					visibility : 'visible'
				});
			}

			// If image preload is on

			if( ls.o.imgPreload ){

				var preImages = [];
				var preloaded = 0;

				// NEW FEATURE v1.8 Preloading background images of layers

				if( layer.css('background-image') != 'none' && layer.css('background-image').indexOf('url') != -1 && !layer.hasClass('ls-preloaded') && !layer.hasClass('ls-not-preloaded') ){
					var bgi = layer.css('background-image');
					bgi = bgi.match(/url\((.*)\)/)[1].replace(/"/gi, '');
					preImages[preImages.length] = [bgi, layer];
				}

				// Images inside layers

				layer.find('img:not(.ls-preloaded, .ls-not-preloaded)').each(function(){

					// NEW FEATURE v5.0.0 Lazy-load

					if( ls.o.lazyLoad === true ){
						$(this).attr('src',$(this).data('src'));
					}
					preImages[preImages.length] = [$(this).attr('src'), $(this)];
				});

				// Background images inside layers

				layer.find('*').each(function(){

					// BUGFIX v1.7 fixed preload bug with sublayers with gradient backgrounds

					if( $(this).css('background-image') != 'none' && $(this).css('background-image').indexOf('url') != -1 && !$(this).hasClass('ls-preloaded') && !$(this).hasClass('ls-not-preloaded') ){
						var bgi = $(this).css('background-image');
						bgi = bgi.match(/url\((.*)\)/)[1].replace(/"/gi, '');
						preImages[preImages.length] = [bgi, $(this)];
					}
				});

				// BUGFIX v1.7 if there are no images in a layer, calling the callback function

				if(preImages.length == 0){

					$('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({
						visibility : 'visible'
					});

					ls.makeResponsive(layer, callback);
				}else{

					// NEW FEATURE v4.0 Showing loading indicator

					if( ls.g.ie78 ){
						ls.g.li.css('display','block');
					}else{

						// BUGIFX v4.1.3 Adding delay to the showing of the loading indicator

						ls.g.li.delay(400).fadeIn(300);
					}

					var afterImgLoad = function(){

						// NEW FEATURE v4.0 Hiding loading indicator

						ls.g.li.stop(true,true).css({
							display: 'none'
						});

						$('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({
							visibility : 'visible'
						});

						// We love you so much IE... -.-

						if( navigator.userAgent.indexOf('Trident/7') !== -1 || ls.g.ie78 ){
							setTimeout(function(){
								ls.makeResponsive(layer, callback);
							},50);
						}else{
							ls.makeResponsive(layer, callback);
						}

					};

					for(x=0;x<preImages.length;x++){

						$('<img>').data('el',preImages[x]).load(function(){

							$(this).data('el')[1].addClass('ls-preloaded');

							if( ++preloaded == preImages.length ){

								afterImgLoad();
							}
						}).error(function(){
							var imgURL = $(this).data('el')[0].substring($(this).data('el')[0].lastIndexOf("/") + 1, $(this).data('el')[0].length);
							if( window.console ){
								console.log('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
							}else{
								alert('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
							}

							$(this).addClass('ls-not-preloaded');

							// IMPROVEMENT v5.2.0 The slider should not stop even if an image cannot be loaded

							if( ++preloaded == preImages.length ){

								afterImgLoad();
							}

						}).attr('src',preImages[x][0]);
					}
				}
			}else{

				$('.ls-thumbnail-wrapper, .ls-nav-next, .ls-nav-prev, .ls-bottom-nav-wrapper').css({
					visibility : 'visible'
				});

				ls.makeResponsive(layer, callback);
			}
		};

		// NEW FEATURE v1.7 making the slider responsive

		ls.makeResponsive = function(layer, callback ){

			layer.css({
				visibility: 'hidden',
				display: 'block'
			});

			if( ls.g.showShadow ){
				ls.g.showShadow();
			}

			ls.resizeSlider();

			if( ls.o.thumbnailNavigation == 'always' ){
				ls.resizeThumb();
			}
			layer.children().each(function(){

				var sl = $(this);

				// positioning

				var ol = sl.data('originalLeft') ? sl.data('originalLeft') : '0';
				var ot = sl.data('originalTop') ? sl.data('originalTop') : '0';

				if( sl.is('a') && sl.children().length > 0 ){
					sl.css({
						display : 'block'
					});
					sl = sl.children();
				}

				var ow = 'auto';
				var oh = 'auto';

				if( sl.data('originalWidth') ){

					if( typeof sl.data('originalWidth') == 'number' ){
						ow = parseInt( sl.data('originalWidth') ) * ls.g.ratio;
					}else if( sl.data('originalWidth').indexOf('%') != -1 ){
						ow = sl.data('originalWidth');
					}
				}

				if( sl.data('originalHeight') ){
					if( typeof sl.data('originalHeight') == 'number' ){
						oh = parseInt( sl.data('originalHeight') ) * ls.g.ratio;
					}else if( sl.data('originalHeight').indexOf('%') != -1 ){
						oh = sl.data('originalHeight');
					}
				}

				// padding

				var opl = sl.data('originalPaddingLeft') ? parseInt( sl.data('originalPaddingLeft') ) * ls.g.ratio : 0;
				var opr = sl.data('originalPaddingRight') ? parseInt( sl.data('originalPaddingRight') ) * ls.g.ratio : 0;
				var opt = sl.data('originalPaddingTop') ? parseInt( sl.data('originalPaddingTop') ) * ls.g.ratio : 0;
				var opb = sl.data('originalPaddingBottom') ? parseInt( sl.data('originalPaddingBottom') ) * ls.g.ratio : 0;

				// border

				var obl = sl.data('originalBorderLeft') ? parseInt( sl.data('originalBorderLeft') ) * ls.g.ratio : 0;
				var obr = sl.data('originalBorderRight') ? parseInt( sl.data('originalBorderRight') ) * ls.g.ratio : 0;
				var obt = sl.data('originalBorderTop') ? parseInt( sl.data('originalBorderTop') ) * ls.g.ratio : 0;
				var obb = sl.data('originalBorderBottom') ? parseInt( sl.data('originalBorderBottom') ) * ls.g.ratio : 0;

				// font

				var ofs = sl.data('originalFontSize');
				var olh = sl.data('originalLineHeight');

				// NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing
				// NEW FEATURE v3.5 added responsiveUnder

				if( ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){

					if( sl.is('img') && !sl.hasClass('ls-bg') && sl.attr('src') ){

						sl.css({
							width: 'auto',
							height: 'auto'
						});

						// IMPROVEMENT v4.5.0 Images can have now starting width / height

						if( ( ow == 0 || ow == 'auto' ) && typeof oh == 'number' && oh != 0 ){
							ow = ( oh / sl.height() ) * sl.width();
						}

						if( ( oh == 0 || oh == 'auto' ) && typeof ow == 'number' && ow != 0 ){
							oh = ( ow / sl.width() ) * sl.height();
						}

						if( ow == 'auto'){
							ow = sl.width() * ls.g.ratio;
						}

						if( oh == 'auto'){
							oh = sl.height() * ls.g.ratio;
						}

						sl.css({
							width : ow,
							height : oh
						});
					}

					if( !sl.is('img') ){
						sl.css({
							width : ow,
							height : oh,
							'font-size' : parseInt(ofs) * ls.g.ratio +'px',
							'line-height' : parseInt(olh) * ls.g.ratio + 'px'
						});
					}

					if( sl.is('div') && sl.find('iframe').data('videoSrc') ){

						var videoIframe = sl.find('iframe');
						videoIframe.attr('width', parseInt( videoIframe.data('originalWidth') ) * ls.g.ratio ).attr('height', parseInt( videoIframe.data('originalHeight') ) * ls.g.ratio );

						sl.css({
							width : parseInt( videoIframe.data('originalWidth') ) * ls.g.ratio,
							height : parseInt( videoIframe.data('originalHeight') ) * ls.g.ratio
						});
					}

					sl.css({
						padding : opt + 'px ' + opr + 'px ' + opb + 'px ' + opl + 'px ',
						borderLeftWidth : obl + 'px',
						borderRightWidth : obr + 'px',
						borderTopWidth : obt + 'px',
						borderBottomWidth : obb + 'px'
					});
				}

				// If it is NOT a bg sublayer

				if( !sl.hasClass('ls-bg') ){

					var sl2 = sl;

					if( sl.parent().is('a') ){
						sl = sl.parent();
					}

					// NEW FEATURE v3.5 sublayerContainer

					var slC = 0;
					if( ls.o.layersContainer ){
						slC = ls.o.layersContainer > 0 ? ( ls.g.sliderWidth() - ls.o.layersContainer ) / 2 : 0;
					}else if( ls.o.sublayerContainer ){
						slC = ls.o.sublayerContainer > 0 ? ( ls.g.sliderWidth() - ls.o.sublayerContainer ) / 2 : 0;
					}
					slC = slC < 0 ? 0 : slC;

					// (RE)positioning sublayer (left property)

					if( ol.indexOf('%') != -1 ){
						sl.css({
							left : ls.g.sliderWidth() / 100 * parseInt(ol) - sl2.width() / 2 - opl - obl
						});
					}else if( slC > 0 || ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){
						sl.css({
							left : slC + parseInt(ol) * ls.g.ratio
						});
					}

					// (RE)positioning sublayer (top property)

					if( ot.indexOf('%') != -1 ){
						sl.css({
							top : ls.g.sliderHeight() / 100 * parseInt(ot) - sl2.height() / 2 - opt - obt
						});
					}else if( ls.g.responsiveMode || ls.o.responsiveUnder > 0 ){
						sl.css({
							top : parseInt(ot) * ls.g.ratio
						});
					}

				}else{

					var inner = $(el).find('.ls-inner');

					sl.css({
						width : 'auto',
						height : 'auto'
					});

					ow = sl.width();
					oh = sl.height();

					// IMPROVEMENT v4.5.0 Resizing smaller background images in full width mode as well to fill the whole slide

					var or = ls.g.ratio;

					if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){
						if( ls.g.sliderWidth() > ow ){
							or = ls.g.sliderWidth() / ow;
							if( ls.g.sliderHeight() > oh * or ){
								or = ls.g.sliderHeight() / oh;
							}
						}else if( ls.g.sliderHeight() > oh ){
							or = ls.g.sliderHeight() / oh;
							if( ls.g.sliderWidth() > ow * or ){
								or = ls.g.sliderWidth() / ow;
							}
						}
					}

					sl.css({
						width : ow * or,
						height : oh * or,
						marginLeft : inner.width() / 2 - ow * or / 2,
						marginTop : inner.height() / 2 - oh * or / 2
					});
//					$('#w2 span:eq(0)').html( ( inner.width() / 2 ) - Math.round( ow * or / 2 ) );
				}
			});

			layer.css({
				display: 'none',
				visibility: 'visible'
			});

			// Resizing shadow

			ls.resizeShadow();

			callback();

			$(this).dequeue();
		};

		// Resizing shadow

		ls.resizeShadow = function(){
			if( ls.g.shadowImg ){
				var resizeShadow = function(){
					if( ls.g.shadowImg.height() > 0 ){
						if( ls.g.shadowBtmMod > 0 ){
							ls.g.shadow.css({
								height: ls.g.shadowImg.height() / 2
							});
						}else{
							ls.g.shadow.css({
								height: ls.g.shadowImg.height(),
								marginTop: - ls.g.shadowImg.height() / 2
							});
						}
					}else{
						setTimeout(function(){
							resizeShadow();
						},50);
					}
				};

				resizeShadow();
			}
		};

		// Resizing the slider

		ls.resizeSlider = function(){

			if( ls.o.responsiveUnder > 0 ){

				if( $(window).width() < ls.o.responsiveUnder ){
					ls.g.responsiveMode = true;
					ls.g.sliderOriginalWidth = ls.o.responsiveUnder + 'px';
				}else{
					ls.g.responsiveMode = false;
					ls.g.sliderOriginalWidth = ls.g.sliderOriginalWidthRU;
					ls.g.ratio = 1;
				}
			}

			// BUGFIX 5.3.0 Fixed full-width resize issue

			if( $(el).closest('.ls-wp-fullwidth-container').length ){

					$(el).closest('.ls-wp-fullwidth-helper').css({
						width : $(window).width()
					});
			}

			// NEW FEATURE v3.0 added "normal" responsive mode with image and font resizing

			if( ls.g.responsiveMode ){

				var parent = $(el).parent();

				// NEW FEATURE v5.5.0 Added fullScreen mode

				if( ls.o.fullScreen === true ){

					$(el).css({
						width : '100%',
						height : $(window).height()
					});
				}else{

					// BUGFIX v4.0 there is no need to subtract the values of the left and right paddings of the container element!

					$(el).css({
					       width : parent.width() - parseInt($(el).css('padding-left')) - parseInt($(el).css('padding-right'))
      					});
					ls.g.ratio = $(el).width() / parseInt( ls.g.sliderOriginalWidth );
					$(el).css({
						height : ls.g.ratio * parseInt( ls.g.sliderOriginalHeight )
					});
				}

			}else{
				ls.g.ratio = 1;
				$(el).css({
					width : ls.g.sliderOriginalWidth,
					height : ls.g.sliderOriginalHeight
				});
			}

			// WP fullWidth mode (originally forceResponsive mode)

			if( $(el).closest('.ls-wp-fullwidth-container').length ){

				$(el).closest('.ls-wp-fullwidth-helper').css({
					height : $(el).outerHeight(true)
				});

				$(el).closest('.ls-wp-fullwidth-container').css({
					height : $(el).outerHeight(true)
				});

				$(el).closest('.ls-wp-fullwidth-helper').css({
					width : $(window).width(),
					left : - $(el).closest('.ls-wp-fullwidth-container').offset().left
				});

				if( ls.g.sliderOriginalWidth.indexOf('%') != -1 ){

					var percentWidth = parseInt( ls.g.sliderOriginalWidth );
					var newWidth = $('body').width() / 100 * percentWidth - ( $(el).outerWidth() - $(el).width() );
					$(el).width( newWidth );
				}
			}

			$(el).find('.ls-inner, .ls-lt-container').css({
				width : ls.g.sliderWidth(),
				height : ls.g.sliderHeight()
			});

			// BUGFIX v2.0 fixed width problem if firstSlide is not 1

			if( ls.g.curLayer && ls.g.nextLayer ){

				ls.g.curLayer.css({
					width : ls.g.sliderWidth(),
					height : ls.g.sliderHeight()
				});

				ls.g.nextLayer.css({
					width : ls.g.sliderWidth(),
					height : ls.g.sliderHeight()
				});

			}else{

				$(el).find('.ls-slide').css({
					width : ls.g.sliderWidth(),
					height : ls.g.sliderHeight()
				});
			}
		};

		// NEW FEATURE v3.0 added responsive yourLogo

		ls.resizeYourLogo = function(){

			ls.g.yourLogo.css({
				width : ls.g.yourLogo.data( 'originalWidth' ) * ls.g.ratio,
				height : ls.g.yourLogo.data( 'originalHeight' ) * ls.g.ratio
			});

			if( ls.g.ie78 ){
				ls.g.yourLogo.css('display','block');
			}else{
				ls.g.yourLogo.fadeIn(300);
			}

			var oL = oR = oT = oB = 'auto';

			if( ls.g.yourLogo.data( 'originalLeft' ) && ls.g.yourLogo.data( 'originalLeft' ).indexOf('%') != -1 ){
				oL = ls.g.sliderWidth() / 100 * parseInt( ls.g.yourLogo.data( 'originalLeft' ) ) - ls.g.yourLogo.width() / 2 + parseInt( $(el).css('padding-left') );
			}else{
				oL = parseInt( ls.g.yourLogo.data( 'originalLeft' ) ) * ls.g.ratio;
			}

			if( ls.g.yourLogo.data( 'originalRight' ) && ls.g.yourLogo.data( 'originalRight' ).indexOf('%') != -1 ){
				oR = ls.g.sliderWidth() / 100 * parseInt( ls.g.yourLogo.data( 'originalRight' ) ) - ls.g.yourLogo.width() / 2 + parseInt( $(el).css('padding-right') );
			}else{
				oR = parseInt( ls.g.yourLogo.data( 'originalRight' ) ) * ls.g.ratio;
			}

			if( ls.g.yourLogo.data( 'originalTop' ) && ls.g.yourLogo.data( 'originalTop' ).indexOf('%') != -1 ){
				oT = ls.g.sliderHeight() / 100 * parseInt( ls.g.yourLogo.data( 'originalTop' ) ) - ls.g.yourLogo.height() / 2 + parseInt( $(el).css('padding-top') );
			}else{
				oT = parseInt( ls.g.yourLogo.data( 'originalTop' ) ) * ls.g.ratio;
			}

			if( ls.g.yourLogo.data( 'originalBottom' ) && ls.g.yourLogo.data( 'originalBottom' ).indexOf('%') != -1 ){
				oB = ls.g.sliderHeight() / 100 * parseInt( ls.g.yourLogo.data( 'originalBottom' ) ) - ls.g.yourLogo.height() / 2 + parseInt( $(el).css('padding-bottom') );
			}else{
				oB = parseInt( ls.g.yourLogo.data( 'originalBottom' ) ) * ls.g.ratio;
			}

			ls.g.yourLogo.css({
				left : oL,
				right : oR,
				top : oT,
				bottom : oB
			});
		};

		// NEW FEATURE v3.5 thumbnailNavigation ('always')

		// Resizing thumbnails

		ls.resizeThumb = function(){

			ls.bottomNavSizeHelper('on');

			var sliderW = ls.g.sliderOriginalWidth.indexOf('%') == -1 ? parseInt( ls.g.sliderOriginalWidth ) : ls.g.sliderWidth();

			$(el).find('.ls-thumbnail-slide a').css({
				width : parseInt( ls.o.tnWidth * ls.g.ratio ),
				height : parseInt( ls.o.tnHeight * ls.g.ratio )
			});

			$(el).find('.ls-thumbnail-slide a:last').css({
				margin: 0
			});

			$(el).find('.ls-thumbnail-slide').css({
				height : parseInt( ls.o.tnHeight * ls.g.ratio )
			});

			var tn = $(el).find('.ls-thumbnail');

			var originalWidth = ls.o.tnContainerWidth.indexOf('%') == -1 ? parseInt( ls.o.tnContainerWidth ) : parseInt( sliderW / 100 * parseInt( ls.o.tnContainerWidth ) );

			tn.css({
				width : originalWidth * Math.floor( ls.g.ratio * 100 ) / 100
			});

			if( tn.width() > $(el).find('.ls-thumbnail-slide').width() ){
				tn.css({
					width : $(el).find('.ls-thumbnail-slide').width()
				});
			}

			ls.bottomNavSizeHelper('off');
		};

		// Changing thumbnails

		ls.changeThumb = function(index){

			var curIndex = index ? index : ls.g.nextLayerIndex;

			$(el).find('.ls-thumbnail-slide a:not(.ls-thumb-'+curIndex+')').children().each(function(){
				$(this).removeClass('ls-thumb-active').stop().fadeTo(750,ls.o.tnInactiveOpacity/100);
			});

			$(el).find('.ls-thumbnail-slide a.ls-thumb-'+curIndex).children().addClass('ls-thumb-active').stop().fadeTo(750,ls.o.tnActiveOpacity/100);
		};

		// Scrolling thumbnails

		ls.scrollThumb = function(){

			if( !$(el).find('.ls-thumbnail-slide-container').hasClass('ls-thumbnail-slide-hover') ){
				var curThumb = $(el).find('.ls-thumb-active').length ? $(el).find('.ls-thumb-active').parent() : false;
				if( curThumb ){
					var thumbCenter = curThumb.position().left + curThumb.width() / 2;
					var mL = $(el).find('.ls-thumbnail-slide-container').width() / 2 - thumbCenter;
					mL = mL < $(el).find('.ls-thumbnail-slide-container').width() - $(el).find('.ls-thumbnail-slide').width() ? $(el).find('.ls-thumbnail-slide-container').width() - $(el).find('.ls-thumbnail-slide').width() : mL;
					mL = mL > 0 ? 0 : mL;
					$(el).find('.ls-thumbnail-slide').animate({
						marginLeft : mL
					}, 600 );
				}
			}
		};

		// IMPROVEMENT v4.1.3 Changed the working of some Thumbnail and Bottom Navigation features

		ls.bottomNavSizeHelper = function(val){

			if( ls.o.hoverBottomNav && !$(el).hasClass('ls-hover') ){
				switch(val){
					case 'on':
						ls.g.thumbsWrapper.css({
							visibility: 'hidden',
							display: 'block'
						});
					break;
					case 'off':
						ls.g.thumbsWrapper.css({
							visibility: 'visible',
							display: 'none'
						});
					break;
				}
			}
		};

		// Animating layers and sublayers

		ls.animate = function(){

			/* GLOBAL (used by both old and new transitions ) */

					// Changing variables
					// BUGFIX v4.6.0 If there is only one layer, there is no need to set ls.g.isAnimating to true

					if( $(el).find('.ls-slide').length > 1 ){
						ls.g.isAnimating = true;
					}

					ls.g.isLoading = false;

					// Clearing timeouts

					clearTimeout( ls.g.slideTimer );
					clearTimeout( ls.g.changeTimer );

					ls.g.stopLayer = ls.g.curLayer;

					// Calling cbAnimStart callback function

					ls.o.cbAnimStart(ls.g);

					// NEW FEATURE v3.5 thumbnailNavigation ('always')

					if( ls.o.thumbnailNavigation == 'always' ){

						// ChangeThumb

						ls.changeThumb();

						// ScrollThumb

						if( !('ontouchstart' in window) ){
							ls.scrollThumb();
						}
					}

					// Adding .ls-animating class to next layer

					ls.g.nextLayer.addClass('ls-animating');



			/* OLD layer transitions (version 3.x) */

					// Setting position and styling of current and next layers

					var curLayerLeft = curLayerRight = curLayerTop = curLayerBottom = nextLayerLeft = nextLayerRight = nextLayerTop = nextLayerBottom = layerMarginLeft = layerMarginRight = layerMarginTop = layerMarginBottom = 'auto';
					var curLayerWidth = nextLayerWidth = ls.g.sliderWidth();
					var curLayerHeight = nextLayerHeight = ls.g.sliderHeight();

					// Calculating direction

					var prevOrNext = ls.g.prevNext == 'prev' ? ls.g.curLayer : ls.g.nextLayer;
					var chooseDirection = prevOrNext.data('slidedirection') ? prevOrNext.data('slidedirection') : ls.o.slideDirection;

					// Setting the direction of sliding

					var slideDirection = ls.g.slideDirections[ls.g.prevNext][chooseDirection];

					if( slideDirection == 'left' || slideDirection == 'right' ){
						curLayerWidth = curLayerTop = nextLayerWidth = nextLayerTop = 0;
						layerMarginTop = 0;
					}
					if( slideDirection == 'top' || slideDirection == 'bottom' ){
						curLayerHeight = curLayerLeft = nextLayerHeight = nextLayerLeft = 0;
						layerMarginLeft = 0;
					}

					switch(slideDirection){
						case 'left':
							curLayerRight = nextLayerLeft = 0;
							layerMarginLeft = -ls.g.sliderWidth();
							break;
						case 'right':
							curLayerLeft = nextLayerRight = 0;
							layerMarginLeft = ls.g.sliderWidth();
							break;
						case 'top':
							curLayerBottom = nextLayerTop = 0;
							layerMarginTop = -ls.g.sliderHeight();
							break;
						case 'bottom':
							curLayerTop = nextLayerBottom = 0;
							layerMarginTop = ls.g.sliderHeight();
							break;
					}

					// Setting start positions and styles of layers

					ls.g.curLayer.css({
						left : curLayerLeft,
						right : curLayerRight,
						top : curLayerTop,
						bottom : curLayerBottom
					});
					ls.g.nextLayer.css({
						width : nextLayerWidth,
						height : nextLayerHeight,
						left : nextLayerLeft,
						right : nextLayerRight,
						top : nextLayerTop,
						bottom : nextLayerBottom
					});

					// Creating variables for the OLD transitions of CURRENT LAYER

					// BUGFIX v1.6 fixed some wrong parameters of current layer
					// BUGFIX v1.7 fixed using of delayout of current layer

					var curDelay = ls.g.curLayer.data('delayout') ? parseInt(ls.g.curLayer.data('delayout')) : ls.o.delayOut;

					var curDuration = ls.g.curLayer.data('durationout') ? parseInt(ls.g.curLayer.data('durationout')) : ls.o.durationOut;
					var curEasing = ls.g.curLayer.data('easingout') ? ls.g.curLayer.data('easingout') : ls.o.easingOut;

					// Creating variables for the OLD transitions of NEXT LAYER

					var nextDelay = ls.g.nextLayer.data('delayin') ? parseInt(ls.g.nextLayer.data('delayin')) : ls.o.delayIn;
					var nextDuration = ls.g.nextLayer.data('durationin') ? parseInt(ls.g.nextLayer.data('durationin')) : ls.o.durationIn;

					// BUGFIX v5.2.0 duration cannot be 0

					if( nextDuration === 0 ){ nextDuration = 1 }
					var nextEasing = ls.g.nextLayer.data('easingin') ? ls.g.nextLayer.data('easingin') : ls.o.easingIn;

					var curLayer = function(){

						// BUGFIX v1.6 added an additional delaytime to current layer to fix the '1px gap' bug
						// BUGFIX v3.0 modified from curDuration / 80 to curDuration / 15

						ls.g.curLayer.delay( curDelay + curDuration / 15).animate({
							width : curLayerWidth,
							height : curLayerHeight
						}, curDuration, curEasing,function(){

							curLayerCallback();
						});
					};

					var curLayerCallback = function(){

						// Stopping current sublayer animations if needed (they are not visible at this point).

						ls.g.stopLayer.find(' > *[class*="ls-l"]').each(function(){
							if( $(this).data('tr') ){
								$(this).data('tr').kill();
							}

							$(this).css({
								filter: 'none'
							});
						});

						// Setting current layer

						ls.g.curLayer = ls.g.nextLayer;

						// IMPROVEMENT v5.2.0 added prevLayerIndex and fixing curLayerIndex (nextLayerIndex is the same as curLayerIndex because the slider doesn't know at this point which slide will be the next)

						ls.g.prevLayerIndex = ls.g.curLayerIndex;
						ls.g.curLayerIndex = ls.g.nextLayerIndex;

						ls.o.cbAnimStop(ls.g);

						// NEW FEATURE v5.0.0 Lazy-load (preloading here the images of the next layer)

						if( ls.o.imgPreload && ls.o.lazyLoad ){

							var preLayerIndex = ls.g.curLayerIndex == ls.g.layersNum ? 1 : ls.g.curLayerIndex + 1;
							$(el).find('.ls-slide').eq(preLayerIndex-1).find('img:not(.ls-preloaded)').each(function(){
								$(this).load(function(){
									$(this).addClass('ls-preloaded');
								}).error(function(){
									var imgURL = $(this).data('src').substring($(this).data('src').lastIndexOf("/") + 1, $(this).data('src').length);
									if( window.console ){
										console('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
									}else{
										alert('LayerSlider error:\r\n\r\nIt seems like the URL of the image or background image "'+imgURL+'" is pointing to a wrong location and it cannot be loaded. Please check the URLs of all your images used in the slider.');
									}
									$(this).addClass('ls-not-preloaded');
								}).attr('src', $(this).data('src'));
							});
						}

						// Changing some css classes

						$(el).find('.ls-slide').removeClass('ls-active');
						$(el).find('.ls-slide:eq(' + ( ls.g.curLayerIndex - 1 ) + ')').addClass('ls-active').removeClass('ls-animating');
						$(el).find('.ls-bottom-slidebuttons a').removeClass('ls-nav-active');
						$(el).find('.ls-bottom-slidebuttons a:eq('+( ls.g.curLayerIndex - 1 )+')').addClass('ls-nav-active');

						// Setting timer if needed

						if( ls.g.autoSlideshow ){
							ls.timer();
						}

						// Changing variables

						ls.g.isAnimating = false;
						if( ls.g.resize == true ){
							ls.makeResponsive( ls.g.curLayer, function(){
								ls.g.resize = false;
							});
						}
					};

					var curSubLayers = function(sublayersDurationOut){

						ls.g.curLayer.find(' > *[class*="ls-l"]').each(function(){

							if( !$(this).data('transitiontype') ){
								ls.transitionType( $(this) );
							}

							// BUGFIX v5.1.0 Removing ls-videohack class before starting transition

							$(this).removeClass('ls-videohack');

							var curSubSlideDir = $(this).data('slidedirection') ? $(this).data('slidedirection') : slideDirection;
							var lml, lmt;

							switch(curSubSlideDir){
								case 'left':
									lml = -ls.g.sliderWidth();
									lmt = 0;
									break;
								case 'right':
									lml = ls.g.sliderWidth();
									lmt = 0;
									break;
								case 'top':
									lmt = -ls.g.sliderHeight();
									lml = 0;
									break;
								case 'bottom':
									lmt = ls.g.sliderHeight();
									lml = 0;
									break;
								case 'fade':
									lmt = 0;
									lml = 0;
									break;
							}

							// NEW FEATURE v1.6 added slideoutdirection to sublayers
							// NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties

							if( $(this).data('transitiontype') === 'new' ){
								var curSubSlideOutDir = 'new';
							}else{
								var curSubSlideOutDir = $(this).data('slideoutdirection') ? $(this).data('slideoutdirection') : false;
							}

							switch(curSubSlideOutDir){
								case 'left':
									lml = ls.g.sliderWidth();
									lmt = 0;
									break;
								case 'right':
									lml = -ls.g.sliderWidth();
									lmt = 0;
									break;
								case 'top':
									lmt = ls.g.sliderHeight();
									lml = 0;
									break;
								case 'bottom':
									lmt = -ls.g.sliderHeight();
									lml = 0;
									break;
								case 'fade':
									lmt = 0;
									lml = 0;
									break;
								case 'new':
									if( $(this).data('offsetxout') ){
										if( $(this).data('offsetxout') === 'left' ){
											lml = ls.g.sliderWidth();
										}else if( $(this).data('offsetxout') === 'right' ){
											lml = -ls.g.sliderWidth();
										}else{
											lml = -parseInt( $(this).data('offsetxout') );
										}
									}else{
										lml = -ls.lt.offsetXOut;
									}
									if( $(this).data('offsetyout') ){
										if( $(this).data('offsetyout') === 'top' ){
											lmt = ls.g.sliderHeight();
										}else if( $(this).data('offsetyout') === 'bottom' ){
											lmt = -ls.g.sliderHeight();
										}else{
											lmt = -parseInt( $(this).data('offsetyout') );
										}
									}else{
										lmt = -ls.lt.offsetYOut;
									}
									break;
							}

							// NEW FEATURES v4.5.0 Rotating & Scaling sublayers
							// BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2)
							// NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions

							var curSubRotate = curSubRotateX = curSubRotateY = curSubScale = curSubSkewX = curSubSkewY = curSubScaleX = curSubScaleY = 'none';
//							if( !ls.g.ie78 && ls.g.enableCSS3 ){
								curSubRotate = $(this).data('rotateout') ? $(this).data('rotateout') : ls.lt.rotateOut;
								curSubRotateX = $(this).data('rotatexout') ? $(this).data('rotatexout') : ls.lt.rotateXOut;
								curSubRotateY = $(this).data('rotateyout') ? $(this).data('rotateyout') : ls.lt.rotateYOut;
								curSubScale = $(this).data('scaleout') ? $(this).data('scaleout') : ls.lt.scaleOut;
								curSubSkewX = $(this).data('skewxout') ? $(this).data('skewxout') : ls.lt.skewXOut;
								curSubSkewY = $(this).data('skewyout') ? $(this).data('skewyout') : ls.lt.skewYOut;
								if( curSubScale === 1 ){
									curSubScaleX = $(this).data('scalexout') ? $(this).data('scalexout') : ls.lt.scaleXOut;
									curSubScaleY = $(this).data('scaleyout') ? $(this).data('scaleyout') : ls.lt.scaleYOut;
								}else{
									curSubScaleX = curSubScaleY = curSubScale;
								}
								var too = $(this).data('transformoriginout') ? $(this).data('transformoriginout').split(' ') : ls.lt.transformOriginOut;
								for(var t =0;t<too.length;t++){
									if( too[t].indexOf('%') === -1 && too[t].indexOf('left') !== -1 && too[t].indexOf('right') !== -1 && too[t].indexOf('top') !== -1 && too[t].indexOf('bottom') !== -1 ){
										too[t] = '' + parseInt( too[t] ) * ls.g.ratio + 'px';
									}
								}
								var curSubTransformOrigin = too.join(' ');
								var curSubPerspective = $(this).data('perspectiveout') ? $(this).data('perspectiveout') : ls.lt.perspectiveOut;
//							}

							// IMPROVEMENT v4.0 Distance (P.level): -1

							var endLeft = parseInt( $(this).css('left') );
							var endTop = parseInt( $(this).css('top') );

							var curSubPLevel = parseInt( $(this).attr('class').split('ls-l')[1] );

							var wh = $(this).outerWidth() > $(this).outerHeight() ? $(this).outerWidth() : $(this).outerHeight();
							var modX = parseInt( curSubRotate ) === 0 ? $(this).outerWidth() : wh;
							var modY = parseInt( curSubRotate ) === 0 ? $(this).outerHeight() : wh;

							if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( $(this).data('offsetxout') === 'left' || $(this).data('offsetxout') === 'right' ) ){
								if( lml < 0 ){
									lml = - ( ls.g.sliderWidth() - endLeft + ( curSubScaleX / 2 - .5 ) * modX + 100  );
								}else if( lml > 0 ){
									lml = endLeft + ( curSubScaleX / 2 + .5 ) * modX + 100;
								}
							}else{
								lml = lml * ls.g.ratio;
							}

							if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( $(this).data('offsetyout') === 'top' || $(this).data('offsetyout') === 'bottom' ) ){
								if( lmt < 0 ){
									lmt = - ( ls.g.sliderHeight() - endTop + ( curSubScaleY / 2 - .5 ) * modY + 100  );
								}else if( lmt > 0 ){
									lmt = endTop + ( curSubScaleY / 2 + .5 ) * modY + 100;
								}
							}else{
								lmt = lmt * ls.g.ratio;
							}

							if( curSubPLevel === -1 || curSubSlideOutDir === 'new' ){
								var curSubPar = 1;
							}else{
								var curSubParMod = ls.g.curLayer.data('parallaxout') ? parseInt(ls.g.curLayer.data('parallaxout')) : ls.o.parallaxOut;
								var curSubPar = curSubPLevel * curSubParMod;
							}

							if( $(this).data('transitiontype') === 'new' ){
								var deO = ls.lt.delayOut;
								var duO = ls.lt.durationOut;
								var eO = ls.lt.easingOut;
							}else{
								var deO = ls.o.delayOut;
								var duO = ls.o.durationOut;
								var eO = ls.o.easingOut;
							}

							var curSubDelay = $(this).data('delayout') ? parseInt($(this).data('delayout')) : deO;
							var curSubTime = $(this).data('durationout') ? parseInt($(this).data('durationout')) : duO;

							// BUGFIX v5.2.0 duration cannot be 0

							if( curSubTime === 0 ){ curSubTime = 1 }
							var curSubEasing = $(this).data('easingout') ? $(this).data('easingout') : eO;

							// On new layer transitions, all sublayer will be slide / fade out in 500ms without any delays

							if(sublayersDurationOut){
								curSubDelay = 0;
								curSubTime = sublayersDurationOut;
								// curSubEasing = 'easeInExpo';
							}

							// Clearing showUntilTimers

							if( $(this).data('showUntilTimer') ){
								clearTimeout( $(this).data('showUntilTimer') );
							}

							var css = {
								visibility : 'hidden'
							};

							var el = $(this);

							var transition = {
								rotation : curSubRotate,
								rotationX : curSubRotateX,
								rotationY : curSubRotateY,
								skewX : curSubSkewX,
								skewY : curSubSkewY,
								scaleX : curSubScaleX,
								scaleY : curSubScaleY,
								x : -lml * curSubPar,
								y : -lmt * curSubPar,
								delay : curSubDelay/1000,
								ease : lsConvertEasing( curSubEasing ),
								onComplete : function(){
									el.css( css );
								}
							};

							if( curSubSlideOutDir == 'fade' || ( !curSubSlideOutDir && curSubSlideDir === 'fade' ) || ( $(this).data('fadeout') !== 'false' && $(this).data('transitiontype') === 'new' ) ){
								transition['opacity'] = 0;
								css['opacity'] = $(this).data( 'originalOpacity' );
							}

							if( $(this).data('tr') ){
								$(this).data('tr').kill();
							}

							TweenLite.set( $(this)[0],{
								transformOrigin : curSubTransformOrigin,
								transformPerspective : curSubPerspective
							});

							$(this).data('tr', TweenLite.to($(this)[0],curSubTime/1000,transition) );

							// $(this).stop(true,false).delay( curSubDelay ).animate( transition, curSubTime, curSubEasing,function(){
							// 	$(this).css( css );
							// });
						});
					};

					var nextLayer = function(){

						ls.g.nextLayer.delay( curDelay + nextDelay ).animate({
							width : ls.g.sliderWidth(),
							height : ls.g.sliderHeight()
						}, nextDuration, nextEasing );
					};

					var nextSubLayers = function(){

						if( ls.g.totalDuration ){
							curDelay = 0;
						}

						// Needed for the Timeline
						if( typeof ls.o.cbTimeLineStart === 'function' ){
							ls.o.cbTimeLineStart(ls.g, curDelay+nextDelay );
						}

						ls.g.nextLayer.find(' > *[class*="ls-l"]').each(function(){

							// Replacing global parameters with unique if need
							// NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties

							if( !$(this).data('transitiontype') ){
								ls.transitionType( $(this) );
							}

							if( $(this).data('transitiontype') === 'new' ){
								var nextSubSlideDir = 'new';
							}else{
								var nextSubSlideDir = $(this).data('slidedirection') ? $(this).data('slidedirection') : slideDirection;
							}
							var lml, lmt;

							switch(nextSubSlideDir){
								case 'left':
									lml = -ls.g.sliderWidth();
									lmt = 0;
									break;
								case 'right':
									lml = ls.g.sliderWidth();
									lmt = 0;
									break;
								case 'top':
									lmt = -ls.g.sliderHeight();
									lml = 0;
									break;
								case 'bottom':
									lmt = ls.g.sliderHeight();
									lml = 0;
									break;
								case 'fade':
									lmt = 0;
									lml = 0;
									break;
								case 'new':
									if( $(this).data('offsetxin') ){
										if( $(this).data('offsetxin') === 'left' ){
											lml = -ls.g.sliderWidth();
										}else if( $(this).data('offsetxin') === 'right' ){
											lml = ls.g.sliderWidth();
										}else{
											lml = parseInt( $(this).data('offsetxin') );
										}
									}else{
										lml = ls.lt.offsetXIn;
									}
									if( $(this).data('offsetyin') ){
										if( $(this).data('offsetyin') === 'top' ){
											lmt = -ls.g.sliderHeight();
										}else if( $(this).data('offsetyin') === 'bottom' ){
											lmt = ls.g.sliderHeight();
										}else{
											lmt = parseInt( $(this).data('offsetyin') );
										}
									}else{
										lmt = ls.lt.offsetYIn;
									}
									break;
							}

							// NEW FEATURE v4.5.0 Rotating & Scaling sublayers
							// BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2)
							// NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions

							var nextSubRotate = nextSubRotateX = nextSubRotateY = nextSubScale = nextSubSkewX = nextSubSkewY = nextSubScaleX = nextSubScaleY = 'none';
//							if( !ls.g.ie78 && ls.g.enableCSS3 ){
								nextSubRotate = $(this).data('rotatein') ? $(this).data('rotatein') : ls.lt.rotateIn;
								nextSubRotateX = $(this).data('rotatexin') ? $(this).data('rotatexin') : ls.lt.rotateXIn;
								nextSubRotateY = $(this).data('rotateyin') ? $(this).data('rotateyin') : ls.lt.rotateYIn;
								nextSubScale = $(this).data('scalein') ? $(this).data('scalein') : ls.lt.scaleIn;
								nextSubSkewX = $(this).data('skewxin') ? $(this).data('skewxin') : ls.lt.skewXIn;
								nextSubSkewY = $(this).data('skewyin') ? $(this).data('skewyin') : ls.lt.skewYIn;
								if( nextSubScale === 1 ){
									nextSubScaleX = $(this).data('scalexin') ? $(this).data('scalexin') : ls.lt.scaleXIn;
									nextSubScaleY = $(this).data('scaleyin') ? $(this).data('scaleyin') : ls.lt.scaleYIn;
								}else{
									nextSubScaleX = nextSubScaleY = nextSubScale;
								}

								var toi = $(this).data('transformoriginin') ? $(this).data('transformoriginin').split(' ') : ls.lt.transformOriginIn;
								for(var t =0;t<toi.length;t++){
									if( toi[t].indexOf('%') === -1 && toi[t].indexOf('left') !== -1 && toi[t].indexOf('right') !== -1 && toi[t].indexOf('top') !== -1 && toi[t].indexOf('bottom') !== -1 ){
										toi[t] = '' + parseInt( toi[t] ) * ls.g.ratio + 'px';
									}
								}
								var nextSubTransformOrigin = toi.join(' ');
								var nextSubPerspective = $(this).data('perspectivein') ? $(this).data('perspectivein') : ls.lt.perspectiveIn;
//							}

							// IMPROVEMENT v4.0 Distance (P.level): -1

							var endLeft = parseInt( $(this).css('left') );
							var endTop = parseInt( $(this).css('top') );

							var nextSubPLevel = parseInt( $(this).attr('class').split('ls-l')[1] );

							// BUGFIX v5.0.1 Fixed the starting position of layers with percentage value of width

							if( $(this)[0].style.width.indexOf('%') !== -1 ){
								$(this).css({
									width: ls.g.sliderWidth() / 100 * parseInt( $(this)[0].style.width )
								});
							}

							var wh = $(this).outerWidth() > $(this).outerHeight() ? $(this).outerWidth() : $(this).outerHeight();
							var modX = parseInt( nextSubRotate ) === 0 ? $(this).outerWidth() : wh;
							var modY = parseInt( nextSubRotate ) === 0 ? $(this).outerHeight() : wh;

							// console.log( modX, $(this).outerWidth(), $(this).width(), $(this).height(), $(this)[0].style.width, $(this).outerHeight(), wh );

							if( ( nextSubPLevel === -1 && nextSubSlideDir !== 'new' ) || ( $(this).data('offsetxin') === 'left' || $(this).data('offsetxin') === 'right' ) ){
								if( lml < 0 ){
									lml = - ( endLeft + ( nextSubScaleX / 2 + .5 ) * modX + 100  );
								}else if( lml > 0 ){
									lml = ls.g.sliderWidth() - endLeft + ( nextSubScaleX / 2 - .5 ) * modX + 100;
								}
							}else{
								lml = lml * ls.g.ratio;
							}

							if( ( nextSubPLevel === -1 && nextSubSlideDir !== 'new' ) || ( $(this).data('offsetyin') === 'top' || $(this).data('offsetyin') === 'bottom' ) ){

								if( lmt < 0 ){
									lmt = - ( endTop + ( nextSubScaleY / 2 + .5 ) * modY + 100  );
								}else if( lmt > 0 ){
									lmt = ls.g.sliderHeight() - endTop + ( nextSubScaleY / 2 - .5 ) * modY + 100;
								}
							}else{
								lmt = lmt * ls.g.ratio;
							}

							if( nextSubPLevel === -1 || nextSubSlideDir === 'new'){
								var nextSubPar = 1;
							}else{
								var nextSubParMod = ls.g.nextLayer.data('parallaxin') ? parseInt(ls.g.nextLayer.data('parallaxin')) : ls.o.parallaxIn;
								var nextSubPar = nextSubPLevel * nextSubParMod;
							}

							if( $(this).data('transitiontype') === 'new' ){
								var deI = ls.lt.delayIn;
								var duI = ls.lt.durationIn;
								var eI = ls.lt.easingIn;
							}else{
								var deI = ls.o.delayIn;
								var duI = ls.o.durationIn;
								var eI = ls.o.easingIn;
							}

							var nextSubDelay = $(this).data('delayin') ? parseInt($(this).data('delayin')) : deI;
							var nextSubTime = $(this).data('durationin') ? parseInt($(this).data('durationin')) : duI;
							var nextSubEasing = $(this).data('easingin') ? $(this).data('easingin') : eI;

							var cursub = $(this);

							var nextSubCallback = function(){

								// BUGFIX v5.1.0 Removing transition property from video layers

								if( cursub.hasClass('ls-video-layer') ){
									cursub.addClass('ls-videohack');
								}

								// NEW FEATURE v2.0 autoPlayVideos

								if( ls.o.autoPlayVideos == true ){

									// YouTube & Vimeo videos

									cursub.find('.ls-videopreview').click();

									// HTML5 videos

									cursub.find('video, audio').each(function(){
										if( typeof $(this)[0].currentTime !== 0){
											$(this)[0].currentTime = 0;
										}
										$(this).click();
									});
								}

								// NEW FEATURE v3.0 showUntil sublayers
								// IMPROVEMENT v5.2.0 video layers with auto play will skip showuntil feature

								if( ( !cursub.hasClass('ls-video-layer') || ( cursub.hasClass('ls-video-layer') && ls.o.autoPlayVideos === false ) ) && cursub.data('showuntil') > 0 ){

									// IMPROVEMENT v4.5.0 sublayerShowUntil will be called anly if necessary

									cursub.data('showUntilTimer', setTimeout(function(){
										ls.sublayerShowUntil( cursub );
									}, cursub.data('showuntil') ));
								}
							};

							$(this).css({
								marginLeft : 0,
								marginTop : 0
							});

							var css = {
								scaleX : nextSubScaleX,
								scaleY : nextSubScaleY,
								skewX : nextSubSkewX,
								skewY : nextSubSkewY,
								rotation : nextSubRotate,
								rotationX : nextSubRotateX,
								rotationY : nextSubRotateY,
								visibility : 'visible',
								x : lml * nextSubPar,
								y : lmt * nextSubPar
							};

							var transition = {
								rotation : 0,
								rotationX : 0,
								rotationY : 0,
								skewX : 0,
								skewY : 0,
								scaleX : 1,
								scaleY : 1,
								ease : lsConvertEasing( nextSubEasing ),
								delay : nextSubDelay/1000,
								x : 0,
								y : 0,
								onComplete : function(){
									nextSubCallback();
								}
							};

							if( nextSubSlideDir.indexOf('fade') != -1 || ( $(this).data('fadein') !== 'false' && $(this).data('transitiontype') === 'new' ) ){

								css['opacity'] = 0;
								transition['opacity'] = $(this).data( 'originalOpacity' );
							}

							// $(this).css( css );

							// $(this).stop().delay( curDelay + nextDelay + nextSubDelay ).animate( transition, nextSubTime, nextSubEasing, function(){
							// 	if( ls.g.ie78 & $(this).data( 'originalOpacity') === 1 ){
							// 		$(this).get(0).style.removeAttribute('filter');
							// 	}
							// 	nextSubCallback();
							// });

							if( $(this).data('tr') ){
								$(this).data('tr').kill();
							}

							TweenLite.set( $(this)[0],{
								transformPerspective : nextSubPerspective,
								transformOrigin : nextSubTransformOrigin
							});

							$(this).data('tr', TweenLite.fromTo($(this)[0],nextSubTime/1000,css,transition) );
						});
					};

			/* NEW FEATURE v4.0 2D & 3D Layer Transitions */

					// Selecting ONE transition (random)
					// If the browser doesn't support CSS3 3D, 2D fallback mode will be used instead
					// In this case, if user didn't specify any 2D transitions, a random will be selected

					var selectTransition = function(){

						// if the browser supports CSS3 3D and user specified at least one of 3D transitions

						if( lsSupport3D( $(el) ) && ( ls.g.nextLayer.data('transition3d') || ls.g.nextLayer.data('customtransition3d') ) ){

							if( ls.g.nextLayer.data('transition3d') && ls.g.nextLayer.data('customtransition3d') ){
								var rnd = Math.floor(Math.random() * 2);
								var rndT = [['3d',ls.g.nextLayer.data('transition3d')],['custom3d',ls.g.nextLayer.data('customtransition3d')]];
								getTransitionType(rndT[rnd][0],rndT[rnd][1]);
							}else if( ls.g.nextLayer.data('transition3d') ){
								getTransitionType('3d',ls.g.nextLayer.data('transition3d'));
							}else{
								getTransitionType('custom3d',ls.g.nextLayer.data('customtransition3d'));
							}

						}else{

							if( ls.g.nextLayer.data('transition2d') && ls.g.nextLayer.data('customtransition2d') ){
								var rnd = Math.floor(Math.random() * 2);
								var rndT = [['2d',ls.g.nextLayer.data('transition2d')],['custom2d',ls.g.nextLayer.data('customtransition2d')]];
								getTransitionType(rndT[rnd][0],rndT[rnd][1]);
							}else if( ls.g.nextLayer.data('transition2d') ){
								getTransitionType('2d',ls.g.nextLayer.data('transition2d'));
							}else if( ls.g.nextLayer.data('customtransition2d') ){
								getTransitionType('custom2d',ls.g.nextLayer.data('customtransition2d'));
							}else{
								getTransitionType('2d','1');
							}
						}
					};

					// Needed by the demo page

					var selectCustomTransition = function(){

						if( lsSupport3D( $(el) ) && LSCustomTransition.indexOf('3d') != -1 ){
							getTransitionType('3d',LSCustomTransition.split(':')[1]);
						}else{
							if( LSCustomTransition.indexOf('3d') != -1){
								getTransitionType('2d','all');
							}else{
								getTransitionType('2d',LSCustomTransition.split(':')[1]);
							}
						}
					};

					// Choosing layer transition type (2d, 3d, or both)

					var getTransitionType = function(type,transitionlist){

						var tr = type.indexOf('custom') == -1 ? ls.t : ls.ct;
						var tt = '3d', lt, number;

						if( type.indexOf('2d') != -1 ){
							tt = '2d';
						}

						if( transitionlist.indexOf('last') != -1 ){
							number = tr['t'+tt].length-1;
							lt = 'last';
						}else if( transitionlist.indexOf('all') != -1){
							number = Math.floor(Math.random() * lsCountProp(tr['t'+tt]) );
							lt = 'random from all';
						}else{
							var t = transitionlist.split(',');
							var l = t.length;
							number = parseInt(t[Math.floor(Math.random() * l)])-1;
							lt = 'random from specified';
						}

						slideTransition(tt,tr['t'+tt][number]);

//						$('.test').html('Originals:<br><br>t3D: '+ls.g.nextLayer.data('transition3d')+'<br>t2D: '+ls.g.nextLayer.data('transition2d')+'<br>custom3D: '+ls.g.nextLayer.data('customtransition3d')+'<br>custom2D: '+ls.g.nextLayer.data('customtransition2d')+'<br><br>Support 3D: '+lsSupport3D( $(el) )+'<br><br>Selected transition:<br><br>Type: '+type+' ('+lt+')<br>Number in transition list: '+(number+1)+'<br>Name of the transition: '+tr['t'+tt][number]['name']);
					};

					// The slideTransition function

					var slideTransition = function(type,prop){

						var inner = $(el).find('.ls-inner');

						// sublayersDurationOut - for future usage

						var sublayersDurationOut = ls.g.curLayer.find('*[class*="ls-l"]').length > 0 ? 1000 : 0;

						// Detecting a carousel transition - Transition name must have the carousel string

						var carousel = prop.name.toLowerCase().indexOf('carousel') == -1 ? false : true;

						// Detecting a crossfade transition - Transition name must have the crossfad string

						var crossfade = prop.name.toLowerCase().indexOf('crossfad') == -1 ? false : true;

						// Calculating cols and rows

						var cols = typeof(prop.cols);
						var rows = typeof(prop.rows);

						switch( cols ){
							case 'number':
								cols = prop.cols;
							break;
							case 'string':
								cols = Math.floor( Math.random() * ( parseInt( prop.cols.split(',')[1] ) - parseInt( prop.cols.split(',')[0] ) + 1) ) + parseInt( prop.cols.split(',')[0] );
							break;
							default:
								cols = Math.floor( Math.random() * ( prop.cols[1] - prop.cols[0] + 1) ) + prop.cols[0];
							break;
						}

						switch( rows ){
							case 'number':
								rows = prop.rows;
							break;
							case 'string':
								rows = Math.floor( Math.random() * ( parseInt( prop.rows.split(',')[1] ) - parseInt( prop.rows.split(',')[0] ) + 1) ) + parseInt( prop.rows.split(',')[0] );
							break;
							default:
								rows = Math.floor( Math.random() * ( prop.rows[1] - prop.rows[0] + 1) ) + prop.rows[0];
							break;
						}

						if( ( ls.g.isMobile() == true && ls.o.optimizeForMobile == true ) || ( ls.g.ie78 && ls.o.optimizeForIE78 == true ) ){

							// Reducing cols in three steps

							if( cols >= 15 ){
								cols = 7;
							}else if( cols >= 5 ){
								cols = 4;
							}else if( cols >= 4 ){
								cols = 3;
							}else if( cols > 2 ){
								cols = 2;
							}

							// Reducing rows in three steps

							if( rows >= 15 ){
								rows = 7;
							}else if( rows >= 5 ){
								rows = 4;
							}else if( rows >= 4 ){
								rows = 3;
							}else if( rows > 2 ){
								rows = 2;
							}

							// Reducing more :)

							if( rows > 2 && cols > 2 ){
								rows = 2;
								if( cols > 4){
									cols = 4;
								}
							}
						}

						var tileWidth = $(el).find('.ls-inner').width() / cols;
						var tileHeight = $(el).find('.ls-inner').height() / rows;

						// Creating HTML markup for layer transitions

						if( !ls.g.ltContainer ){
							ls.g.ltContainer = $('<div>').addClass('ls-lt-container').addClass('ls-overflow-hidden').css({
								width : inner.width(),
								height : inner.height()
							}).prependTo( inner );
						}else{
							ls.g.ltContainer.stop(true,true).empty().css({
								display : 'block',
								width : inner.width(),
								height : inner.height()
							});
						}

						// Setting size

						var restW = inner.width() - Math.floor(tileWidth) * cols;
						var restH = inner.height() - Math.floor(tileHeight) * rows;

						var tileSequence = [];

						// IMPROVEMENT v4.1.3 Array-randomizer is now a local function
						// Randomize array function

						tileSequence.randomize = function() {
						  var i = this.length, j, tempi, tempj;
						  if ( i == 0 ) return false;
						  while ( --i ) {
						     j       = Math.floor( Math.random() * ( i + 1 ) );
						     tempi   = this[i];
						     tempj   = this[j];
						     this[i] = tempj;
						     this[j] = tempi;
						  }
						  return this;
						}

						for(var ts=0; ts<cols * rows; ts++){
							tileSequence.push(ts);
						}

						// Setting the sequences of the transition

						switch( prop.tile.sequence ){
							case 'reverse':
								tileSequence.reverse();
							break;
							case 'col-forward':
								tileSequence = lsOrderArray(rows,cols,'forward');
							break;
							case 'col-reverse':
								tileSequence = lsOrderArray(rows,cols,'reverse');
							break;
							case 'random':
								tileSequence.randomize();
							break;
						}

						var curBG = ls.g.curLayer.find('.ls-bg');
						var nextBG = ls.g.nextLayer.find('.ls-bg');

						// IMPROVEMENT v4.6.0 If current and next layer both have no BG, skipping the slide transition

						if( curBG.length == 0 && nextBG.length == 0 ){
							type = '2d';
							prop = $.extend(true, {}, ls.t['t2d'][0]);
							prop.transition.duration = 1
							prop.tile.delay = 0;
						}

						if( type == '3d' ){
							ls.g.totalDuration = ((cols * rows) - 1) * prop.tile.delay;

							var stepDuration = 0;

							if( prop.before && prop.before.duration ){
								stepDuration += prop.before.duration;
							}
							if( prop.animation && prop.animation.duration ){
								stepDuration += prop.animation.duration;
							}
							if( prop.after && prop.after.duration ){
								stepDuration += prop.after.duration;
							}

							ls.g.totalDuration += stepDuration;

							var stepDelay = 0;

							if( prop.before && prop.before.delay ){
								stepDelay += prop.before.delay;
							}
							if( prop.animation && prop.animation.delay ){
								stepDelay += prop.animation.delay;
							}
							if( prop.after && prop.after.delay ){
								stepDelay += prop.after.delay;
							}

							ls.g.totalDuration += stepDelay;

						}else{
							ls.g.totalDuration = ((cols * rows) - 1) * prop.tile.delay + prop.transition.duration;

							// IMPROVEMENT v4.5.0 Creating separated containers for current and next tiles

							ls.g.curTiles = $('<div>').addClass('ls-curtiles').appendTo( ls.g.ltContainer );
							ls.g.nextTiles = $('<div>').addClass('ls-nexttiles').appendTo( ls.g.ltContainer );
						}

						var pn = ls.g.prevNext;

						// Creating cuboids for 3d or tiles for 2d transition (cols * rows)

						for(var tiles=0; tiles < cols * rows; tiles++){

							var rW = tiles%cols == 0 ? restW : 0;
							var rH = tiles > (rows-1)*cols-1 ? restH : 0;

							var tile = $('<div>').addClass('ls-lt-tile').css({
								width : Math.floor(tileWidth) + rW,
								height : Math.floor(tileHeight) + rH
							}).appendTo( ls.g.ltContainer );

							var curTile, nextTile;

							// If current transition is a 3d transition

							if( type == '3d' ){

								tile.addClass('ls-3d-container');

								var W = Math.floor(tileWidth) + rW;
								var H = Math.floor(tileHeight) + rH;
								var D;

								if( prop.animation.direction == 'horizontal' ){
									if( Math.abs(prop.animation.transition.rotateY) > 90 && prop.tile.depth != 'large' ){
										D = Math.floor( W / 7 ) + rW;
									}else{
										D = W;
									}
								}else{
									if( Math.abs(prop.animation.transition.rotateX) > 90 && prop.tile.depth != 'large' ){
										D = Math.floor( H / 7 ) + rH;
									}else{
										D = H;
									}
								}

								var W2 = W/2;
								var H2 = H/2;
								var D2 = D/2;

								// createCuboids function will append cuboids with their style settings to their container

								// BUGFIX v5.1.2 the prefixless transform must be the last property

								var createCuboids = function(c,a,w,h,tx,ty,tz,rx,ry){
									$('<div>').addClass(c).css({
										width: w,
										height: h,
										'-o-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
										'-ms-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
										'-moz-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
										'-webkit-transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)',
										'transform': 'translate3d('+tx+'px, '+ty+'px, '+tz+'px) rotateX('+rx+'deg) rotateY('+ry+'deg) rotateZ(0deg) scale3d(1, 1, 1)'
									}).appendTo(a);
								};

								createCuboids('ls-3d-box',tile,0,0,0,0,-D2,0,0);

								var backRotX = 0
								var topRotX = 0
								var bottomRotX = 0

								if( prop.animation.direction == 'vertical' && Math.abs(prop.animation.transition.rotateX) > 90){
									createCuboids('ls-3d-back',tile.find('.ls-3d-box'),W,H,-W2,-H2,-D2,180,0);
								}else{
									createCuboids('ls-3d-back',tile.find('.ls-3d-box'),W,H,-W2,-H2,-D2,0,180);
								}

								createCuboids('ls-3d-bottom',tile.find('.ls-3d-box'),W,D,-W2,H2-D2,0,-90,0);
								createCuboids('ls-3d-top',tile.find('.ls-3d-box'),W,D,-W2,-H2-D2,0,90,0);
								createCuboids('ls-3d-front',tile.find('.ls-3d-box'),W,H,-W2,-H2,D2,0,0);
								createCuboids('ls-3d-left',tile.find('.ls-3d-box'),D,H,-W2-D2,-H2,0,0,-90);
								createCuboids('ls-3d-right',tile.find('.ls-3d-box'),D,H,W2-D2,-H2,0,0,90);

								curTile = tile.find('.ls-3d-front');

								if( prop.animation.direction == 'horizontal' ){
									if( Math.abs(prop.animation.transition.rotateY) > 90 ){
										nextTile = tile.find('.ls-3d-back');
									}else{
										nextTile = tile.find('.ls-3d-left, .ls-3d-right');
									}
								}else{
									if( Math.abs(prop.animation.transition.rotateX) > 90 ){
										nextTile = tile.find('.ls-3d-back');
									}else{
										nextTile = tile.find('.ls-3d-top, .ls-3d-bottom');
									}
								}

								// Animating cuboids

								var curCubDelay = tileSequence[tiles] * prop.tile.delay;

								var curCub = ls.g.ltContainer.find('.ls-3d-container:eq('+tiles+') .ls-3d-box');

								var tl = new TimelineLite();

								if( prop.before && prop.before.transition ){
									prop.before.transition.delay = prop.before.transition.delay ? (prop.before.transition.delay + curCubDelay)/1000 : curCubDelay/1000;
									tl.to( curCub[0],prop.before.duration/1000,lsConvertTransition( prop.before.transition, prop.before.easing ));
								}else{
									prop.animation.transition.delay = prop.animation.transition.delay ? (prop.animation.transition.delay + curCubDelay)/1000 : curCubDelay/1000;
								}

								tl.to( curCub[0],prop.animation.duration/1000,lsConvertTransition( prop.animation.transition, prop.animation.easing ));

								if( prop.after ){
									if( !prop.after.transition ){
										prop.after.transition = {};
									}
									tl.to( curCub[0],prop.after.duration/1000,lsConvertTransition( prop.after.transition, prop.after.easing, 'after' ));
								}

							}else{

								// If current transition is a 2d transition

								var T1 = L1 = T2 = L2 = 'auto';
								var O1 = O2 = 1;

								if( prop.transition.direction == 'random' ){
									var dir = ['top','bottom','right','left'];
									var direction = dir[Math.floor(Math.random() * dir.length )];
								}else{
									var direction = prop.transition.direction;
								}

								// IMPROVEMENT v4.5.0 Reversing animation directions if slider is moving backwards

								if( prop.name.toLowerCase().indexOf('mirror') != -1 && tiles%2 == 0 ){
									if( pn == 'prev' ){
										pn = 'next';
									}else{
										pn = 'prev';
									}
								}

								if( pn == 'prev' ){

									switch( direction ){
										case 'top':
											direction = 'bottom';
										break;
										case 'bottom':
											direction = 'top';
										break;
										case 'left':
											direction = 'right';
										break;
										case 'right':
											direction = 'left';
										break;
										case 'topleft':
											direction = 'bottomright';
										break;
										case 'topright':
											direction = 'bottomleft';
										break;
										case 'bottomleft':
											direction = 'topright';
										break;
										case 'bottomright':
											direction = 'topleft';
										break;
									}
								}

								switch( direction ){
									case 'top':
										T1 = T2 = -tile.height();
										L1 = L2 = 0;
									break;
									case 'bottom':
										T1 = T2 = tile.height();
										L1 = L2 = 0;
									break;
									case 'left':
										T1 = T2 = 0;
										L1 = L2 = -tile.width();
									break;
									case 'right':
										T1 = T2 = 0;
										L1 = L2 = tile.width();
									break;
									case 'topleft':
										T1 = tile.height();
										T2 = 0;
										L1 = tile.width();
										L2 = 0;
									break;
									case 'topright':
										T1 = tile.height();
										T2 = 0;
										L1 = - tile.width();
										L2 = 0;
									break;
									case 'bottomleft':
										T1 = - tile.height();
										T2 = 0;
										L1 = tile.width();
										L2 = 0;
									break;
									case 'bottomright':
										T1 = - tile.height();
										T2 = 0;
										L1 = - tile.width();
										L2 = 0;
									break;
								}

								ls.g.scale2D = prop.transition.scale ? prop.transition.scale : 1;

								if( carousel == true && ls.g.scale2D != 1 ){

									T1 = T1 / 2;
									T2 = T2 / 2;
									L1 = L1 / 2;
									L2 = L2 / 2;
								}

								// Selecting the type of the transition

//								if( !ls.g.ie78 || ( ls.g.ie78 && !ls.o.optimizeForIE78 ) ||  ( ls.g.ie78 && ls.o.optimizeForIE78 == true && prop.name.toLowerCase().indexOf('crossfade') != -1 ) ){
									switch( prop.transition.type ){
										case 'fade':
											T1 = T2 = L1 = L2 = 0;
											O1 = 0;
											O2 = 1;
										break;
										case 'mixed':
										O1 = 0;
										O2 = 1;
										if( ls.g.scale2D == 1 ){
											T2 = L2 = 0;
										}
										break;
									}
//								}

								// IMPROVEMENT v4.5.0 Implemented Rotation and Scale into 2D Transitions

								if((( prop.transition.rotate || prop.transition.rotateX || prop.transition.rotateY ) || ls.g.scale2D != 1 ) && !ls.g.ie78 && prop.transition.type != 'slide' ){
									tile.css({
										overflow : 'visible'
									});
								}else{
									tile.css({
										overflow : 'hidden'
									});
								}

								if( carousel == true){
									ls.g.curTiles.css({
										overflow: 'visible'
									});
								}else{
									ls.g.curTiles.css({
										overflow: 'hidden'
									});
								}

								if( crossfade == true || prop.transition.type == 'slide' || carousel == true ){
									var tileInCur = tile.appendTo( ls.g.curTiles );
									var tileInNext = tile.clone().appendTo( ls.g.nextTiles );
									curTile = $('<div>').addClass('ls-curtile').appendTo( tileInCur );
								}else{
									var tileInNext = tile.appendTo( ls.g.nextTiles );
								}

								nextTile = $('<div>').addClass('ls-nexttile').appendTo( tileInNext ).css({
									top : -T1,
									left : -L1,
									dispay : 'block',
									opacity : O1
								});

								// Animating tiles

								var curTileDelay = tileSequence[tiles] * prop.tile.delay;

								// IMPROVEMENT v4.5.0 Implemented various types of rotations into 2D Transitions

								var r = prop.transition.rotate ? prop.transition.rotate : 0;
								var rX = prop.transition.rotateX ? prop.transition.rotateX : 0;
								var rY = prop.transition.rotateY ? prop.transition.rotateY : 0;

								// Reversing rotation degrees if slider is moving backwards

								if( pn == 'prev' ){
									r = -r;
									rX = -rX;
									rY = -rY;
								}

								TweenLite.fromTo(nextTile[0],prop.transition.duration/1000,{
									rotation : r,
									rotationX : rX,
									rotationY : rY,
									scale : ls.g.scale2D
								},{
									delay : curTileDelay / 1000,
									top : 0,
									left : 0,
									opacity : O2,
									rotation : 0,
									rotationX : 0,
									rotationY : 0,
									scale : 1,
									ease : lsConvertEasing( prop.transition.easing )
								});

								// IMPROVEMENT v5.0.0 Smart crossfading for semi-transparent PNG and different size JPG backgrounds

								if(
									crossfade == true && (
										nextBG.length < 1 || (
											nextBG.length > 0 && (
												nextBG.attr('src').toLowerCase().indexOf('png') != -1 || (
													nextBG.width() < ls.g.sliderWidth() || nextBG.height() < ls.g.sliderHeight()
												)
											)
										)
									)
								){
									TweenLite.to(curTile[0],prop.transition.duration/1000,{
										delay : curTileDelay / 1000,
										opacity : 0,
										ease : lsConvertEasing( prop.transition.easing )
									});
								}

								if( ( prop.transition.type == 'slide' || carousel == true ) && prop.name.toLowerCase().indexOf('mirror') == -1 ){

									var r2 = 0;

									if( r != 0 ){
										r2 = -r;
									}

									TweenLite.to(curTile[0],prop.transition.duration/1000,{
										delay : curTileDelay / 1000,
										top : T2,
										left : L2,
										rotation : r2,
										scale : ls.g.scale2D,
										opacity: O1,
										ease : lsConvertEasing( prop.transition.easing )
									});
								}
							}

							// Appending the background images of current and next layers into the tiles on both of 2d & 3d transitions
							// BUGFIX v5.0.0 added Math.floor to prevent '1px bug' under Safari and Firefox

							if( curBG.length ){
								if( type == '3d' || ( type == '2d' && ( crossfade == true || prop.transition.type == 'slide' || carousel == true ) ) ){
									curTile.append($('<img>').attr('src', curBG.attr('src')).css({
										width : curBG[0].style.width,
										height : curBG[0].style.height,
										marginLeft : parseFloat(curBG.css('margin-left')) - parseFloat(tile.position().left),
										marginTop : parseFloat(curBG.css('margin-top')) - parseFloat(tile.position().top)
									}));
								}else if( ls.g.curTiles.children().length == 0 ){
									ls.g.curTiles.append($('<img>').attr('src', curBG.attr('src')).css({
										width : curBG[0].style.width,
										height : curBG[0].style.height,
										marginLeft : parseFloat(curBG.css('margin-left')),
										marginTop : parseFloat(curBG.css('margin-top'))
									}));

								}
							}

							if( nextBG.length ){
								nextTile.append( $('<img>').attr('src', nextBG.attr('src')).css({
									width : nextBG[0].style.width,
									height : nextBG[0].style.height,
									marginLeft : parseFloat(nextBG.css('margin-left')) - parseFloat(tile.position().left),
									marginTop : parseFloat(nextBG.css('margin-top')) - parseFloat(tile.position().top)
								}));
							}
						}

						// Storing current and next layer elements in a local variable (needed by setTimeout functions in some cases)

						var curLayer = ls.g.curLayer;
						var nextLayer = ls.g.nextLayer;

						// Hiding the background image of the current and next layers (immediately)

						setTimeout(function(){
							curLayer.find('.ls-bg').css({
								visibility : 'hidden'
							});
						},50);

						nextLayer.find('.ls-bg').css({
							visibility : 'hidden'
						});
						ls.g.ltContainer.removeClass('ls-overflow-hidden');

						// Sliding out the sublayers of the current layer
						// (immediately, delay out and duration out properties are not applied to the sublayers during the new layer transitions)

						curSubLayers(sublayersDurationOut);

						// BUGFIX v5.2.0 prevents background flickering in some cases

						if( sublayersDurationOut === 0 ){
							sublayersDurationOut = 10;
						}

						// Hiding current layer after its sublayers animated out

						setTimeout(function(){
							curLayer.css({
								width: 0
							});
						}, sublayersDurationOut );

						// Calculating next layer delay

						var nextLayerTimeShift = parseInt(nextLayer.data('timeshift')) ? parseInt(nextLayer.data('timeshift')) : 0;
						var nextLayerDelay = ls.g.totalDuration + nextLayerTimeShift > 0 ? ls.g.totalDuration + nextLayerTimeShift : 0;

						// Showing next layer and sliding sublayers of the next layer in after the current layer transition ended

						setTimeout(function(){
							if( ls.g.resize == true ){
								ls.g.ltContainer.empty();
								curLayer.removeClass('ls-active');
								ls.makeResponsive( nextLayer, function(){
									ls.g.resize = false;
								});
							}

							// Sliding in / fading in the sublayers of the next layer

							nextSubLayers();

							// NEW FEATURE v4.6.0 Hiding background if the next layer has png BG or has no BG
							// BUGFIX v4.6.1 Changed some properties to prevent flickering

							if( nextLayer.find('.ls-bg').length < 1 || ( nextLayer.find('.ls-bg').length > 0 && nextLayer.find('.ls-bg').attr('src').toLowerCase().indexOf('png') != -1 ) ){

								ls.g.ltContainer.delay(350).fadeOut(300,function(){
									$(this).empty().show();
								});
							}

							// Displaying the next layer (immediately)

							nextLayer.css({
								width : ls.g.sliderWidth(),
								height : ls.g.sliderHeight()
							});
						}, nextLayerDelay );

						// BUGFIX v5.0.1 Added a minimal value of ls.g.totalDuration
						// CHANGED in v5.1.0 due to a fading issue in carousel transition

						if( ls.g.totalDuration < 300 ){
							ls.g.totalDuration = 1000;
						}

						// Changing visibility to visible of the background image of the next layer and overflow to hidden of .ls-lt-container after the transition and calling callback function

						setTimeout(function(){
							ls.g.ltContainer.addClass('ls-overflow-hidden');

							nextLayer.addClass('ls-active');

							if( nextLayer.find('.ls-bg').length ){

								nextLayer.find('.ls-bg').css({
									display : 'none',
									visibility : 'visible'
								});
								if( ls.g.ie78 ){
									nextLayer.find('.ls-bg').css('display','block');
									setTimeout(function(){
										curLayerCallback();
									},500);
								}else{
									nextLayer.find('.ls-bg').fadeIn(500, function(){
										curLayerCallback();
									});
								}
							}else{
								curLayerCallback();
							}

						}, ls.g.totalDuration );
					};



			/* Selecting and running the transition */

					// NEW FEATURE v5.2.0 Starts the slider only if it is in the viewport

					var startInViewport = function(){

						ls.g.nextLayer.find(' > *[class*="ls-l"]').each(function(){

							$(this).css({
								visibility : 'hidden'
							});
						});

						ls.g.sliderTop = $(el).offset().top;

						$(window).load(function(){
							setTimeout(function(){

								ls.g.sliderTop = $(el).offset().top;
							}, 20);
						});

						var isSliderInViewport = function(){
							if( $(window).scrollTop() + $(window).height() - ( ls.g.sliderHeight() / 2 ) > ls.g.sliderTop ){
								ls.g.firstSlideAnimated = true;
								if( ls.g.originalAutoStart === true ){
									//ls.g.autoSlideshow = true;
								 	ls.o.autoStart = true;
								 	ls.start();
								}
								nextSubLayers();
							}
						}

						$(window).scroll(function(){
							if( !ls.g.firstSlideAnimated ){
								isSliderInViewport();
							}
						});

						isSliderInViewport();
					};

					var tType = ( ( ls.g.nextLayer.data('transition3d') || ls.g.nextLayer.data('transition2d') ) && ls.t ) || ( ( ls.g.nextLayer.data('customtransition3d') || ls.g.nextLayer.data('customtransition2d') ) && ls.ct ) ? 'new' : 'old';

					if( !ls.g.nextLayer.data('transitiontype') ){
						ls.transitionType( ls.g.nextLayer );
					}

					if( ls.g.nextLayer.data('transitiontype') === 'new' ){
						tType = 'new';
					}

					if( ls.o.slideTransition ){
						tType = 'forced';
					}
					if( ls.o.animateFirstSlide && !ls.g.firstSlideAnimated ){

						// BUGFIX v3.5 there is no need to animate 'current' layer if the following conditions are true
						//			   this fixes the sublayer animation direction bug

						if( ls.g.layersNum == 1 ){
							var curDelay = 0;

							// IMPROVEMENT v4.1.0 Calling cbAnimStop(); function if only one layer is in the slider

							ls.o.cbAnimStop(ls.g);

						}else{
							var nextLayerTimeShift = parseInt(ls.g.nextLayer.data('timeshift')) ? parseInt(ls.g.nextLayer.data('timeshift')) : 0;
							var d = tType == 'new' ? 0 : curDuration;
							ls.g.t5 = setTimeout(function(){
								curLayerCallback();
							}, d + Math.abs(nextLayerTimeShift) );
						}

						// curDelay must be 0!

						ls.g.totalDuration = true;

						// Animating SUBLAYERS of the first layer

						if( ls.o.startInViewport === true ){

							startInViewport();
						}else{

							ls.g.firstSlideAnimated = true;
							nextSubLayers();
						}

						// Displaying the first layer (immediately)

						ls.g.nextLayer.css({
							width : ls.g.sliderWidth(),
							height : ls.g.sliderHeight()
						});

						if( !ls.g.ie78 ){
							ls.g.nextLayer.find('.ls-bg').css({
								display : 'none'
							}).fadeIn(ls.o.sliderFadeInDuration);
						}

						ls.g.isLoading = false;
					}else{

						switch(tType){

							// Old transitions (sliding layers)

							case 'old':

								ls.g.totalDuration = false;

								// BUGFIX v4.5.0 Removing elements from ls-lt-container is necessary

								if( ls.g.ltContainer ){
									ls.g.ltContainer.empty();
								}

								// Animating CURRENT LAYER and its SUBLAYERS

								curLayer();
								curSubLayers();

								// Animating NEXT LAYER and its SUBLAYERS

								nextLayer();
								nextSubLayers();
							break;

							// NEW FEATURE v4.0 2D & 3D Layer Transitions

							case 'new':

								if( typeof LSCustomTransition != 'undefined' ){
									selectCustomTransition();
								}else{
									selectTransition();
								}
							break;

							case 'forced':
								slideTransition( ls.o.slideTransition.type, ls.o.slideTransition.obj );
							break;
						}
					}
		};

		ls.transitionType = function( el ){

			var ttype =  el.data('ls') ||
								( 	!el.data('ls') &&
									!el.data('slidedelay') &&
									!el.data('slidedirection') &&
									!el.data('slideoutdirection') &&
									!el.data('delayin') &&
									!el.data('delayout') &&
									!el.data('durationin') &&
									!el.data('durationout') &&
									!el.data('showuntil') &&
									!el.data('easingin') &&
									!el.data('easingout') &&
									!el.data('scalein') &&
									!el.data('scaleout') &&
									!el.data('rotatein') &&
									!el.data('rotateout')
								) ? 'new' : 'old';
			el.data('transitiontype', ttype);
		};

		ls.sublayerShowUntil = function( sublayer ){

			if( !sublayer.data('transitiontype') ){
				ls.transitionType( sublayer );
			}

			// BUGFIX v5.1.0 Removing ls-videohack class before starting transition

			sublayer.removeClass('ls-videohack');

			var prevOrNext = ls.g.curLayer;

			if( ls.g.prevNext != 'prev' && ls.g.nextLayer ){
				prevOrNext = ls.g.nextLayer;
			}

			var chooseDirection = prevOrNext.data('slidedirection') ? prevOrNext.data('slidedirection') : ls.o.slideDirection;

			// Setting the direction of sliding

			var slideDirection = ls.g.slideDirections[ls.g.prevNext][chooseDirection];

			var curSubSlideDir = sublayer.data('slidedirection') ? sublayer.data('slidedirection') : slideDirection;
			var lml, lmt;

			switch(curSubSlideDir){
				case 'left':
					lml = -ls.g.sliderWidth();
					lmt = 0;
					break;
				case 'right':
					lml = ls.g.sliderWidth();
					lmt = 0;
					break;
				case 'top':
					lmt = -ls.g.sliderHeight();
					lml = 0;
					break;
				case 'bottom':
					lmt = ls.g.sliderHeight();
					lml = 0;
					break;
				case 'fade':
					lmt = 0;
					lml = 0;
					break;
			}

			// NEW FEATURE v1.6 added slideoutdirection to sublayers
			// NEW FEATURES 5.0.0 added axis-free transitions with offsetx and offsety properties

			if( sublayer.data('transitiontype') === 'new' ){
				var curSubSlideOutDir = 'new';
			}else{
				var curSubSlideOutDir = sublayer.data('slideoutdirection') ? sublayer.data('slideoutdirection') : false;
			}

			switch(curSubSlideOutDir){
				case 'left':
					lml = ls.g.sliderWidth();
					lmt = 0;
					break;
				case 'right':
					lml = -ls.g.sliderWidth();
					lmt = 0;
					break;
				case 'top':
					lmt = ls.g.sliderHeight();
					lml = 0;
					break;
				case 'bottom':
					lmt = -ls.g.sliderHeight();
					lml = 0;
					break;
				case 'fade':
					lmt = 0;
					lml = 0;
					break;
				case 'new':
					if( sublayer.data('offsetxout') ){
						if( sublayer.data('offsetxout') === 'left' ){
							lml = ls.g.sliderWidth();
						}else if( sublayer.data('offsetxout') === 'right' ){
							lml = -ls.g.sliderWidth();
						}else{
							lml = -parseInt( sublayer.data('offsetxout') );
						}
					}else{
						lml = -ls.lt.offsetXOut;
					}
					if( sublayer.data('offsetyout') ){
						if( sublayer.data('offsetyout') === 'top' ){
							lmt = ls.g.sliderHeight();
						}else if( sublayer.data('offsetyout') === 'bottom' ){
							lmt = -ls.g.sliderHeight();
						}else{
							lmt = -parseInt( sublayer.data('offsetyout') );
						}
					}else{
						lmt = -ls.lt.offsetYOut;
					}
					break;
			}

			// NEW FEATURE v4.5.0 Rotating & Scaling sublayers
			// BUGFIX v4.5.5 changing the default value from 0 to 'none' (because of old jQuery, 1.7.2)
			// NEW FEATURES v5.0.0 Added SkewX, SkewY, ScaleX, ScaleY, RotateX & RotateY transitions

			var curSubRotate = curSubRotateX = curSubRotateY = curSubScale = curSubSkewX = curSubSkewY = curSubScaleX = curSubScaleY = 'none';
//			if( !ls.g.ie78 && ls.g.enableCSS3 ){
				curSubRotate = sublayer.data('rotateout') ? sublayer.data('rotateout') : ls.lt.rotateOut;
				curSubRotateX = sublayer.data('rotatexout') ? sublayer.data('rotatexout') : ls.lt.rotateXOut;
				curSubRotateY = sublayer.data('rotateyout') ? sublayer.data('rotateyout') : ls.lt.rotateYOut;
				curSubScale = sublayer.data('scaleout') ? sublayer.data('scaleout') : ls.lt.scaleOut;
				curSubSkewX = sublayer.data('skewxout') ? sublayer.data('skewxout') : ls.lt.skewXOut;
				curSubSkewY = sublayer.data('skewyout') ? sublayer.data('skewyout') : ls.lt.skewYOut;
				if( curSubScale === 1 ){
					curSubScaleX = sublayer.data('scalexout') ? sublayer.data('scalexout') : ls.lt.scaleXOut;
					curSubScaleY = sublayer.data('scaleyout') ? sublayer.data('scaleyout') : ls.lt.scaleYOut;
				}else{
					curSubScaleX = curSubScaleY = curSubScale;
				}
				var too = sublayer.data('transformoriginout') ? sublayer.data('transformoriginout').split(' ') : ls.lt.transformOriginOut;

				for(var t =0;t<too.length;t++){
					if( too[t].indexOf('%') === -1 && too[t].indexOf('left') !== -1 && too[t].indexOf('right') !== -1 && too[t].indexOf('top') !== -1 && too[t].indexOf('bottom') !== -1 ){
						too[t] = '' + parseInt( too[t] ) * ls.g.ratio + 'px';
					}
				}
				var curSubTransformOrigin = too.join(' ');
				var curSubPerspective = sublayer.data('perspectiveout') ? sublayer.data('perspectiveout') : ls.lt.perspectiveOut;

//			}

			// IMPROVEMENT v4.0 Distance (P.level): -1

			var endLeft = parseInt( sublayer.css('left') );
			var endTop = parseInt( sublayer.css('top') );

			var curSubPLevel = parseInt( sublayer.attr('class').split('ls-l')[1] );

			var wh = sublayer.outerWidth() > sublayer.outerHeight() ? sublayer.outerWidth() : sublayer.outerHeight();
			var modX = parseInt( curSubRotate ) === 0 ? sublayer.outerWidth() : wh;
			var modY = parseInt( curSubRotate ) === 0 ? sublayer.outerHeight() : wh;

			if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( sublayer.data('offsetxout') === 'left' || sublayer.data('offsetxout') === 'right' ) ){
				if( lml < 0 ){
					lml = - ( ls.g.sliderWidth() - endLeft + ( curSubScaleX / 2 - .5 ) * modX + 100  );
				}else if( lml > 0 ){
					lml = endLeft + ( curSubScaleX / 2 + .5 ) * modX + 100;
				}
			}else{
				lml = lml * ls.g.ratio;
			}

			if( ( curSubPLevel === -1 && curSubSlideOutDir !== 'new' ) || ( sublayer.data('offsetyout') === 'top' || sublayer.data('offsetyout') === 'bottom' ) ){
				if( lmt < 0 ){
					lmt = - ( ls.g.sliderHeight() - endTop + ( curSubScaleY / 2 - .5 ) * modY + 100  );
				}else if( lmt > 0 ){
					lmt = endTop + ( curSubScaleY / 2 + .5 ) * modY + 100;
				}
			}else{
				lmt = lmt * ls.g.ratio;
			}

			if( curSubPLevel === -1 || curSubSlideOutDir === 'new' ){
				var curSubPar = 1;
			}else{
				var curSubParMod = ls.g.curLayer.data('parallaxout') ? parseInt(ls.g.curLayer.data('parallaxout')) : ls.o.parallaxOut;
				var curSubPar = curSubPLevel * curSubParMod;
			}

//			var curSubDelay = parseInt( sublayer.data('showuntil') );

			if( sublayer.data('transitiontype') === 'new' ){
				var duO = ls.lt.durationOut;
				var eO = ls.lt.easingOut;
			}else{
				var duO = ls.o.durationOut;
				var eO = ls.o.easingOut;
			}

			var curSubTime = sublayer.data('durationout') ? parseInt(sublayer.data('durationout')) : duO;

			// BUGFIX v5.2.0 duration cannot be 0

			if( curSubTime === 0 ){ curSubTime = 1 }
			var curSubEasing = sublayer.data('easingout') ? sublayer.data('easingout') : eO;

			var css = {
				visibility : 'hidden'
			};

			var transition = {
				rotation : curSubRotate,
				rotationX : curSubRotateX,
				rotationY : curSubRotateY,
				skewX : curSubSkewX,
				skewY : curSubSkewY,
				scaleX : curSubScaleX,
				scaleY : curSubScaleY,
				x : -lml * curSubPar,
				y : -lmt * curSubPar,
				ease : lsConvertEasing( curSubEasing ),
				onComplete : function(){
					sublayer.css( css );
				}
			};

			if( curSubSlideOutDir == 'fade' || ( !curSubSlideOutDir && curSubSlideDir == 'fade' ) || ( sublayer.data('fadeout') !== 'false' && sublayer.data('transitiontype') === 'new' ) ){
				transition['opacity'] = 0;
				css['opacity'] = sublayer.data( 'originalOpacity' );
			}

			TweenLite.set( sublayer[0],{
				transformPerspective : curSubPerspective,
				transformOrigin : curSubTransformOrigin
			});

			TweenLite.to(sublayer[0],curSubTime/1000,transition);

			// sublayer.stop(true,false).animate( transition, curSubTime, curSubEasing,function(){
			// 	sublayer.css( css );
			// });
		};

		// v3.6 Improved Debug Mode

// 		ls.debug = function(){

// 			ls.d = {
// 				history : $('<div>'),
// 				// adds a H1 (title)
// 				aT : function(content){
// 					$('<h1>'+content+'</h1>').appendTo( ls.d.history );
// 				},
// 				// adds an empty UL
// 				aeU : function(){
// 					$('<ul>').appendTo( ls.d.history );
// 				},
// 				// adds an UL with a LI
// 				aU : function(content){
// 					$('<ul><li>'+content+'</li></ul>').appendTo( ls.d.history );
// 				},
// 				// adds a LI into the last UL
// 				aL : function(content){
// 					$('<li>'+content+'</li>').appendTo( ls.d.history.find('ul:last') );
// 				},
// 				// adds an UL into the last LI of the last UL
// 				aUU : function(content){
// 					$('<ul>').appendTo( ls.d.history.find('ul:last li:last') );
// 				},
// 				// adds a Function to the first LI inside the last UL
// 				aF : function(elem){
// 					ls.d.history.find('ul:last li:last').hover(
// 						function(){
// 							elem.css({
// 								border: '2px solid red',
// 								marginTop : parseInt( elem.css('margin-top') ) - 2,
// 								marginLeft : parseInt( elem.css('margin-left') ) - 2
// 							});
// 						},
// 						function(){
// 							elem.css({
// 								border: '0px',
// 								marginTop : parseInt( elem.css('margin-top') ) + 2,
// 								marginLeft : parseInt( elem.css('margin-left') ) + 2
// 							});
// 						}
// 					);
// 				},
// 				show : function(){
// 					if( !$('body').find('.ls-debug-console').length ){

// 						if( !ls.d.putData ){

// 							// Init code

// 							ls.d.aT('Init code');
// 							ls.d.aeU();

// 							for( var prop in ls.o ){
// 								ls.d.aL(prop+': <strong>' + ls.o[prop] + '</strong>');
// 							}

// //							ls.d.aL('sliderOriginalWidth: <strong>' + ls.g.sliderOriginalWidth + '</strong>');
// //							ls.d.aL('sliderOriginalHeight: <strong>' + ls.g.sliderOriginalHeight + '</strong>');

// 							// Slides, layers data

// 							ls.d.aT('LayerSlider Content');
// 							ls.d.aU('Number of slides found: <strong>' + $(el).find('.ls-slide').length + '</strong>');

// 							$(el).find('.ls-inner .ls-slide, .ls-inner *[class*="ls-l"]').each(function(){

// 								if( $(this).hasClass('ls-slide') ){
// 									ls.d.aU('<strong>SLIDE ' + ( $(this).index() + 1 ) + '</strong>');
// 									ls.d.aUU();
// 									ls.d.aL('<strong>SLIDE ' + ( $(this).index() + 1 ) + ' properties:</strong><br><br>');
// 								}else{
// 									ls.d.aU('&nbsp;&nbsp;&nbsp;&nbsp;Layer ( '+$(this).prop('tagName')+' )');
// 									ls.d.aF($(this));
// 									ls.d.aUU();
// 									ls.d.aL('<strong>'+$(this).prop('tagName')+' layer properties:</strong><br><br>');
// 									ls.d.aL('distance / class: <strong>'+$(this).attr('class')+'</strong>');
// 								}

// 								$.each( $(this).data(),function(name, val) {
// 									ls.d.aL( name +': <strong>' + val + '</strong>');
// 								});
// 							});

// 							ls.d.putData = true;
// 						}

// 						var dc = $('<div>').addClass('ls-debug-console').css({
// 							position: 'fixed',
// 							zIndex: '10000000000',
// 							top: '10px',
// 							right: '10px',
// 							width: '300px',
// 							padding: '20px',
// 							background: 'black',
// 							'border-radius': '10px',
// 							height: $(window).height() - 60,
// 							opacity: 0,
// 							marginRight: 150
// 						}).appendTo( $('body') ).css({
// 							marginRight: 0,
// 							opacity: .9
// 						}).click(function(e){
// 							if(e.shiftKey && e.altKey){
// 								$(this).remove();
// 							}
// 						});
// 						var ds = $('<div>').css({
// 							width: '100%',
// 							height: '100%',
// 							overflow: 'auto'
// 						}).appendTo( dc );
// 						var dd = $('<div>').css({
// 							width: '100%'
// 						}).appendTo( ds ).append( ls.d.history );
// 					}
// 				},
// 				hide : function(){
// 					$('body').find('.ls-debug-console').remove();
// 				}
// 			};

// 			$(el).click(function(e){
// 				if(e.shiftKey && e.altKey){
// 					ls.d.show();
// 				}
// 			});
// 		};

		// initializing
		ls.load();
	};

	var lsConvertEasing = function( e ){

		var t;

		if( e.toLowerCase().indexOf('swing') !== -1 || e.toLowerCase().indexOf('linear') !== -1 ){
			t = Linear.easeNone;
		}else if( e.toLowerCase().indexOf('easeinout') !== -1 ){
			var ee = e.toLowerCase().split('easeinout')[1];
			t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeInOut;
		}else if( e.toLowerCase().indexOf('easeout') !== -1 ){
			var ee = e.toLowerCase().split('easeout')[1];
			t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeOut;
		}else if( e.toLowerCase().indexOf('easein') !== -1 ){
			var ee = e.toLowerCase().split('easein')[1];
			t = window[ee.charAt(0).toUpperCase() + ee.slice(1)].easeIn;
		}

		return t;
	};

	var lsConvertTransition = function( t, e, type, undef ){

		if( typeof e === 'undefined' ){
			var e = 'easeInOutQuart';
		}
		var tt = {};

		if( t.rotate !== undef ){
			tt.rotation = t.rotate;
		}
		if( t.rotateY !== undef ){
			tt.rotationY = t.rotateY;
		}
		if( t.rotateX !== undef ){
			tt.rotationX = t.rotateX;
		}
		if( type === 'after' ){
			tt.scaleX = tt.scaleY = tt.scaleZ = 1;
		}else if( t.scale3d !== undef ){
			tt.scaleX = tt.scaleY = tt.scaleZ = t.scale3d;
		}

		if( t.delay ){
			tt.delay = type === 'after' ? t.delay/1000 : t.delay;
		}

		tt.ease = lsConvertEasing( e );

		return tt;
	};

	// Support3D checks the CSS3 3D capability of the browser (based on the idea of Modernizr.js)

	var lsSupport3D = function( el ) {

		var testEl = $('<div>'),
			s3d1 = false,
			s3d2 = false,
			properties = ['perspective', 'OPerspective', 'msPerspective', 'MozPerspective', 'WebkitPerspective'];
			transform = ['transformStyle','OTransformStyle','msTransformStyle','MozTransformStyle','WebkitTransformStyle'];

		for (var i = properties.length - 1; i >= 0; i--){
			s3d1 = s3d1 ? s3d1 : testEl[0].style[properties[i]] != undefined;
		};

		// preserve 3D test

		for (var i = transform.length - 1; i >= 0; i--){
			testEl.css( 'transform-style', 'preserve-3d' );
			s3d2 = s3d2 ? s3d2 : testEl[0].style[transform[i]] == 'preserve-3d';
		};

		// If browser has perspective capability and it is webkit, we must check it with this solution because Chrome can give false positive result if GPU acceleration is disabled

        if (s3d1 && testEl[0].style[properties[4]] != undefined){
			testEl.attr('id','ls-test3d').appendTo( el );
            s3d1 = testEl[0].offsetHeight === 3 && testEl[0].offsetLeft === 9;
			testEl.remove();
        }

        return (s3d1 && s3d2);
	};

	// Order array function

	var lsOrderArray = function(x,y,dir) {
		var i = [];
		if(dir=='forward'){
			for( var a=0; a<x;a++){
				for( var b=0; b<y; b++){
					i.push(a+b*x);
				}
			}
		}else{
			for( var a=x-1; a>-1;a--){
				for( var b=y-1; b>-1; b--){
					i.push(a+b*x);
				}
			}
		}
		return i;
	};

	// CountProp counts the properties in an object

	var lsCountProp = function(obj) {
	    var count = 0;

	    for(var prop in obj) {
	        if(obj.hasOwnProperty(prop)){
	            ++count;
			}
	    }
	    return count;
	};

	// We need the browser function (removed from jQuery 1.9)

	var lsBrowser = function(){

		uaMatch = function( ua ) {
			ua = ua.toLowerCase();

			var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
				/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
				/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
				/(msie) ([\w.]+)/.exec( ua ) ||
				ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
				[];

			return {
				browser: match[ 1 ] || "",
				version: match[ 2 ] || "0"
			};
		};

		var matched = uaMatch( navigator.userAgent ), browser = {};

		if ( matched.browser ) {
			browser[ matched.browser ] = true;
			browser.version = matched.version;
		}

		if ( browser.chrome ) {
			browser.webkit = true;
		} else if ( browser.webkit ) {
			browser.safari = true;
		}

		return browser;
	};

	lsPrefixes = function(obj, method){

		var pfx = ['webkit', 'khtml', 'moz', 'ms', 'o', ''];
		var p = 0, m, t;
		while (p < pfx.length && !obj[m]) {
			m = method;
			if (pfx[p] == '') {
				m = m.substr(0,1).toLowerCase() + m.substr(1);
			}
			m = pfx[p] + m;
			t = typeof obj[m];
			if (t != 'undefined') {
				pfx = [pfx[p]];
				return (t == 'function' ? obj[m]() : obj[m]);
			}
			p++;
		}
	};

	// Global parameters (Do not change these settings!)

	layerSlider.global = {

		version				: '5.3.0',

		isMobile			: function(){
								if( navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i) ){
									return true;
								}else{
									return false;
								}
							},
		isHideOn3D			: function(el){
								if( el.css('padding-bottom') == 'auto' || el.css('padding-bottom') == 'none' || el.css('padding-bottom') == 0 || el.css('padding-bottom') == '0px' ){
									return true;
								}else{
									return false;
								}
							},

		ie78				: lsBrowser().msie && lsBrowser().version < 9 ? true : false,
		originalAutoStart	: false,
		paused				: false,
		pausedByVideo		: false,
		autoSlideshow		: false,
		isAnimating			: false,
		layersNum			: null,
		prevNext			: 'next',
		slideTimer			: null,
		sliderWidth			: null,
		sliderHeight		: null,
		slideDirections		: {
								prev : {
									left	: 'right',
									right	: 'left',
									top		: 'bottom',
									bottom	: 'top'
								},
								next : {
									left	: 'left',
									right	: 'right',
									top		: 'top',
									bottom	: 'bottom'
								}
							},

		// Default delay time, fadeout and fadein durations of videoPreview images

		v					: {
								d	: 500,
								fo	: 750,
								fi	: 500
							}
	};

	// Layer Transition Defaults

	layerSlider.layerTransitions = {

		offsetXIn			: 80,
		offsetYIn			: 0,
		durationIn			: 1000,
		delayIn				: 0,
		easingIn			: 'easeInOutQuint',
		fadeIn				: true,
		rotateIn			: 0,
		rotateXIn			: 0,
		rotateYIn			: 0,
		scaleIn				: 1,
		scaleXIn			: 1,
		scaleYIn			: 1,
		skewXIn				: 0,
		skewYIn				: 0,
		transformOriginIn	: ['50%','50%','0'],
		perspectiveIn 		: 500,

		offsetXOut			: -80,
		offsetYOut			: 0,
		durationOut			: 400,
		showUntil			: 0,
		easingOut			: 'easeInOutQuint',
		fadeOut				: true,
		rotateOut			: 0,
		rotateXOut			: 0,
		rotateYOut			: 0,
		scaleOut			: 1,
		scaleXOut			: 1,
		scaleYOut			: 1,
		skewXOut			: 0,
		skewYOut			: 0,
		transformOriginOut	: ['50%','50%','0'],
		perspectiveOut 		: 500
	};

	layerSlider.slideTransitions = {

		slideDelay			: 4000							// Time before the next slide will be loading.
	};

	// Global settings (can be modified)

	layerSlider.options = {

		// Layout

		responsive			: true,
		responsiveUnder		: 0,
		layersContainer		: 0,
		fullScreen			: false,					// NEW FEATURE 5.5.0
		appendTo			: '',						// NEW FEATURE 5.5.0

		// Slideshow

		autoStart			: true,
		startInViewport		: true,						// NEW FEATURE v5.2.0
		pauseOnHover		: true,
		firstSlide			: 1,
		animateFirstSlide	: true,
		sliderFadeInDuration: 350,						// NEW FEATURE v5.2.0
		loops				: 0,
		forceLoopNum		: true,
		twoWaySlideshow		: false,
		randomSlideshow		: false,

		// Appearance

		skin				: 'v5',
		skinsPath			: '/layerslider/skins/',
		globalBGColor		: 'transparent',
		globalBGImage		: false,

		// Navigation Area

		navPrevNext			: true,
		navStartStop		: true,
		navButtons			: true,
		keybNav				: true,
		touchNav			: true,
		hoverPrevNext		: true,
		hoverBottomNav		: false,
		showBarTimer		: false,
		showCircleTimer		: true,

		// Thumbnail navigation

		thumbnailNavigation	: 'hover',
		tnContainerWidth	: '60%',
		tnWidth				: 100,
		tnHeight			: 60,
		tnActiveOpacity		: 35,
		tnInactiveOpacity	: 100,

		// Videos

		autoPlayVideos		: true,
		autoPauseSlideshow	: 'auto',
		youtubePreview		: 'maxresdefault.jpg',

		// Preload

		imgPreload			: true,
		lazyLoad 			: true,

		// YourLogo

		yourLogo			: false,
		yourLogoStyle		: 'left: -10px; top: -10px;',
		yourLogoLink		: false,
		yourLogoTarget		: '_self',

		// Optimize for IE7 and IE8

		optimizeForMobile	: true,
		optimizeForIE78		: true,

		// NEW FEATURES 5.2.0 Mobile features

		hideOnMobile		: false,
		hideUnder			: 0,
		hideOver			: 1000000,

		staticImage			: '', // will be available in 5.5.0

		// API functions

		cbInit				: function(element){},
		cbStart				: function(data){},
		cbStop				: function(data){},
		cbPause				: function(data){},
		cbAnimStart			: function(data){},
		cbAnimStop			: function(data){},
		cbPrev				: function(data){},
		cbNext				: function(data){},

		// !!! IMPORTANT !!! The following properties are deprecated from version 5.0.0 DO NOT USE THEM.
		// The slider will recognize these properties in the init code or if you add these properties into the style attribute of the layer
		// but we recommend you to use to new html5 data attribute (data-ls) with the new properties

		slideDelay			: 4000,
		slideDirection		: 'right',
		parallaxIn			: .45,
		parallaxOut			: .45,
		durationIn			: 1000,
		durationOut			: 1000,
		easingIn			: 'easeInOutQuint',
		easingOut			: 'easeInOutQuint',
		delayIn				: 0,
		delayOut			: 0
	};

})(jQuery);
